前言:
在按照自己之前的文档搭建Hadoop和hive时遇到不少的问题,特此记录。
参考博客:
Flink1.10集群环境搭建 - 萘汝 - 博客园 (cnblogs.com)
CentOS7下构建SQL引擎 - 萘汝 - 博客园 (cnblogs.com)
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
刷新设置。使用 java
、javac
、java -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
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
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
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
。
格式化完成后,start-all.sh
启动。使用jps
查看进程:
#jps #显示以下几个进程说明启动成功 95273 DataNode #可有可无 95465 SecondaryNameNode #重要 95144 NameNode #重要 95900 NodeManager #可有可无 95775 ResourceManager #非常重要
前端查看:在windows下打开网页:hadoop01:9870 hadoop02:8088
至此,Hadoop分布式集群搭建完成。
数据仓库(元数据存储在mysql中,元数据包括表名、表的属性等,实际数据存储于 HDFS 中)
输入 start-all.sh
,启动Hadoop集群。由于Hadoop的版本是3.1.4,所以这里hive选择3.1.2版本。
将下载的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';
至此,安装完成。
将下载的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版本
确保已启动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++进行查找修改,然后替换文档)
%s#${system:java.io.tmpdir}#/usr/local/hive/tmp#g
%s#${system:user.name}#root#g
修改hive.metastore.schema.verification,将对应的value修改为false
查找ConnectionURL、ConnectionDriverName、ConnectionUserName、ConnectionPassword,将其全部注释掉。
找到第3237行,直接将<description></description>
注释掉
将hive的默认数据库改为mysql,即在hive-site.xml中添加以下内容:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop01:3306/hive?useSSL=false&createDatabaseIfNotExist=true&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
,生成元数据。
能否成功初始化数据库是至关重要的一环!!!
启动hive,./hive
执行show databases;
查看数据库
执行查看函数的命令show funtions;
至此,Hive安装完成。
容易出错的地方,在root用户下启动hadoop需要进行的配置。启动hive时初始化数据库失败。