ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hadoop+Hive

2022-03-10 14:05:36  阅读:214  来源: 互联网

标签:root Hadoop hive hadoop usr mysql Hive local


前言:

在按照自己之前的文档搭建Hadoop和hive时遇到不少的问题,特此记录。

参考博客:

Flink1.10集群环境搭建 - 萘汝 - 博客园 (cnblogs.com)

CentOS7下构建SQL引擎 - 萘汝 - 博客园 (cnblogs.com)

CentOS7下搭建Hadoop分布式集群

Hadooop集群规划

服务器IP hadoop01 hadoop02 hadoop03
HDFS NameNode
HDFS SecondaryNameNode
HDFS DataNode DataNode DataNode
YARN NodeManager NodeManager NodeManager
YARN ResourceManager

前置工作

配置ssh

输入systemctl restart sshd.service 启动ssh服务;

设置开机自动启动ssh服务systemctl enable sshd.service

配置hosts

vi /etc/hosts打开文件,在最后一行加入:IP地址 主机名

ip hadoop01
ip hadoop02
ip hadoop03

关闭防火墙

systemctl status firewalld		查看防火墙状态
systemctl stop firewalld		关闭防火墙
systemctl disable firewalld		永久关闭防火墙。

关闭SELINUX

vi /etc/selinux/config编辑文件,将SELINUX=enfocing修改为disabled.

配置ssh免密登陆

输入命令 ssh-keygen -t rsa ,按三次确认键,生成公钥和私钥。

cd /root/.ssh/可看到生成的公钥id_rsa.pub和私钥文件id_rsa。hadoop02、hadoop03同样操作。

在Hadoop02、Hadoop03上输入cat /root/.ssh/id_rsa.pub查看公钥内容,复制备用。

  • 在hadoop01上

    .ssh目录下执行 touch authorized_keys创建存放秘钥的文件;

    cp id_rsa.pub authorized_keys 将公钥放进authorized_keys文件,可无密登录本机;

    chmod 644 authorized_keys 修改 authorized_keys 权限;

    sudo service sshd restart 重启ssh服务;

    ssh hadoop01 命令测试本机免密登录,第一次需要输入 yes ,下次就不用再输入了。

    echo '公钥' >> authorized_keys 将前面复制的Hadoop02、Hadoop03公钥内容写入authorized_keys中;

    scp /root/.ssh/authorized_keys hadoop02:/root/.ssh

    scp /root/.ssh/authorized_keys hadoop03:/root/.ssh

  • 在hadoop02、hadoop03上

    在.ssh目录下,chmod 644 authorized_keys修改 authorized_keys 权限。

权限配置完成后,回到hadoop01,输入ssh hadoop02连接 hadoop02,exit退出连接;ssh hadoop03连接 hadoop03,exit退出连接;至此, root用户下三台虚拟机互相免密登录配置完成。

安装jdk

将下载的jdk-8u301-linux-x64.tar.gz传输到/usr/loacl目录下。

在/usr/local目录下解压:tar zxvf jdk-8u301-linux-x64.tar.gz

vi /etc/profile配置环境变量:

export JAVA_HOME=/usr/local/jdk1.8.0_301
export CALSSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile刷新设置。使用 javajavacjava -version 验证是否安装成功。

scp -r /usr/local/jdk1.8.0_301 root@hadoop02:/usr/local/

scp -r /usr/local/jdk1.8.0_301 root@hadoop03:/usr/local/

scp /etc/profile root@hadoop02:/etc/profile

scp /etc/profile root@hadoop03:/etc/profile

hadoop02、hadoop03刷新配置:source /etc/profile,输入java -version验证。

集群搭建

将下载的hadoop-3.1.4.tar.gz传输到/usr/loacl目录下。

解压:tar zxvf hadoop-3.1.4.tar.gz

重命名:mv /usr/local/hadoop-3.1.4 /usr/local/hadoop

修改5个配置文件

vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/usr/local/jdk1.8.0_301

vi /usr/local/hadoop/etc/hadoop/core-site.xml

<!--指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址-->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop01:9000</value>
</property>
<!--指定HADOOP运行时产生文件的存储目录-->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/data</value>
</property>

vi /usr/local/hadoop/etc/hadoop/hdfs-site.xml

<property>
	<name>dfs.namenode.http-address</name>
	<value>hadoop01:9870</value>
</property>
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>hadoop03:9868</value>
</property>

vi /usr/local/hadoop/etc/hadoop/mapred-site.xml

<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

vi /usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop02</value>
</property>
<property>
    <name>yarn.nodemanager.env-whitelist</name>
    <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>		
</property>
<!-- 设置虚拟内存更大些,默认2.1,即物理内存1G,虚拟内存2.1G -->
<property>
    <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>2.1</value>
</property>

环境变量和workers

  • 配置workers

    vi /usr/local/hadoop/etc/hadoop/workers

    hadoop01
    hadoop02
    hadoop03
    
  • 配置环境变量

    vi /etc/profile

    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
    

scp -r /usr/local/hadoop root@hadoop02:/usr/local/

scp -r /usr/local/hadoop root@hadoop03:/usr/local/

scp /etc/profile root@hadoop02:/etc/profile

scp /etc/profile root@hadoop03:/etc/profile

source /etc/profile使配置环境变量生效

验证:hadoop version

image-20210928171813595

配置hosts

Windows下修改hosts文件,以管理员身份运行Windows PowerShell

输入notepad,打开记事本,在记事本中打开hosts

添加:

ip hadoop01
ip hadoop02
ip hadoop03

启动集群

在root模式下启动hadoop,需要在hadoop的sbin目录下修改几个配置文件:

vi start-dfs.sh		vi stop-dfs.sh
添加:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

vi start-yarn.sh	vi stop-yarn.sh
添加:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

首次启动需要格式化磁盘。在/usr/local/hadoop目录下,输入hdfs namenode -format

image-20210929143350205

格式化完成后,start-all.sh启动。使用jps查看进程:

image-20220310124123625

image-20220310124148093

image-20220310124211892

#jps #显示以下几个进程说明启动成功
95273 DataNode #可有可无
95465 SecondaryNameNode #重要
95144 NameNode #重要
95900 NodeManager #可有可无
95775 ResourceManager #非常重要

前端查看:在windows下打开网页:hadoop01:9870 hadoop02:8088

至此,Hadoop分布式集群搭建完成。

Hive安装

数据仓库(元数据存储在mysql中,元数据包括表名、表的属性等,实际数据存储于 HDFS 中)

输入 start-all.sh,启动Hadoop集群。由于Hadoop的版本是3.1.4,所以这里hive选择3.1.2版本。

安装mysql

将下载的mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz传输到/usr/loacl目录下。

解压:tar zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz

重命名:mv mysql-5.7.35-linux-glibc2.12-x86_64 mysql

mkdir /usr/local/mysql/data		//新建data目录
groupadd mysql					//创建用户组
useradd -g mysql mysql			//用户和密码
chown -R mysql.mysql /usr/local/mysql		//权限
cd /usr/local/mysql/bin		//切换到bin目录
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ --initialize		//初始化,将临时密码保存下来

vi /etc/my.cnf,添加以下内容:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql/
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

添加mysqld服务到系统

cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql

启动mysql

service mysql start
service mysql status	#查看启动状态
service mysql stop		#关闭mysql
service mysql restart	#重启mysql

#将mysql命令添加到服务
ln -s /usr/local/mysql/bin/mysql /usr/bin
#使用临时密码登录mysql
mysql -uroot -p	

#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';		
flush privileges;

修改远程连接并生效

use mysql;
update user set host='%' where user='root';
flush privileges;
select user,host from user;

#可将其他user都删掉
delete from user where host='localhost';

image-20220310130144374

至此,安装完成。

安装hive

将下载的apache-hive-3.1.2-bin.tar.gz传输到/usr/loacl目录下。

解压:tar zxvf apache-hive-3.1.2-bin.tar.gz

重命名:mv apache-hive-3.1.2-bin.tar.gz hive

hive只需安装在hadoop01上即可。

/etc/profile配置环境变量

export HIVE_HOME=/usr/local/hive
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=.:${HIVE_HOME}/lib:$CLASSPATH

source /etc/profile更新配置,输入hive --version查看hive版本

image-20220310085510127

配置Hive

确保已启动hadoop。

$HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hive/warehouse

$HADOOP_HOME/bin/hadoop fs -chmod 777 /user/hive/warehouse

$HADOOP_HOME/bin/hadoop fs -mkdir -p /tmp/hive/

$HADOOP_HOME/bin/hadoop fs -chmod 777 /tmp/hive

让hadoop新建/user/hive/warehouse目录与tmp目录,并赋予权限。查看是否创建成功:

$HADOOP_HOME/bin/hadoop fs -ls /user/hive/
$HADOOP_HOME/bin/hadoop fs -ls /tmp/

修改hive-site.xml

cd /usr/local/hive/conf

cp hive-default.xml.template hive-site.xml

vi hive-site.xml(建议在windows在使用Notepad++进行查找修改,然后替换文档)

  • 将hive-site.xml文件中的${system:java.io.tmpdir}替换为/usr/local/hive/tmp

%s#${system:java.io.tmpdir}#/usr/local/hive/tmp#g

  • 将${system:user.name}都替换为root

%s#${system:user.name}#root#g

  • 修改hive.metastore.schema.verification,将对应的value修改为false

    image-20211101152314536

  • 查找ConnectionURL、ConnectionDriverName、ConnectionUserName、ConnectionPassword,将其全部注释掉。

    image-20211102102017662

    image-20211102101337702

    image-20211102102529450

    image-20211102104242519

  • 找到第3237行,直接将<description></description>注释掉

    image-20211102092125740

  • 将hive的默认数据库改为mysql,即在hive-site.xml中添加以下内容:

    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://hadoop01:3306/hive?useSSL=false&amp;createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    

hive-site.xml修改完成。

cp hive-env.sh.template hive-env.sh

vi hive-env.sh,添加以下内容

export  HADOOP_HOME=/usr/local/hadoop
export  PATH=$PATH:$HIVE_HOME/bin
export  HIVE_CONF_DIR=/usr/local/hive/conf
export  HIVE_AUX_JARS_PATH=/usr/local/hive/lib

查看以下两个目录中的guava.jar版本是否一致:

/usr/local/hive/lib/
/usr/local/hadoop/share/hadoop/common/lib/

删除低版本的那个,将高版本的复制到低版本目录下。

rm /usr/local/hive/lib/guava-19.0.jar

cp /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive/lib/

下载mysql的jdbc驱动包

这里使用的MySQL版本为5.7,所以使用mysql-connector-java-5.1.47.tar.gz,将其传输到/usr/local目录下,解压后将mysql-connector-java-5.1.47-bin.jar移动到hive的lib目录下。

mv mysql-connector-java-5.1.47-bin.jar /usr/local/hive/lib

这里根据自己数据库的版本进行适当选择。若是mysql8.0版本,需要将前面配置的Driver改为:

com.mysql,cj.jdbc.Driver

启动测试

在mysql数据库中新建hive数据库。create datebase hive;

初始化数据库schematool -dbType mysql -initSchema,生成元数据。

能否成功初始化数据库是至关重要的一环!!!

image-20220310133843446

启动hive,./hive

执行show databases;查看数据库

执行查看函数的命令show funtions;

至此,Hive安装完成。

容易出错的地方,在root用户下启动hadoop需要进行的配置。启动hive时初始化数据库失败。

标签:root,Hadoop,hive,hadoop,usr,mysql,Hive,local
来源: https://www.cnblogs.com/xsyw/p/15989175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有