前言
要帮某人搭建一个Hive的环境。首先,做一个虚拟机,或者用云主机也可以;然后先安装Hadoop;再安装Hive.
环境说明:
- Ubuntu 16.04
- Hadoop 3.0.1
- Hive 2.3.3
1. 先安装Hadoop
1.1 安装JRE或JDK
选择有多种,官方的是Oracle的JRE,另外还有OpenJDK等. 如果都装了,后面只要选一个来配置环境变量JAVA_HOME即可。
apt install <some jre>
当你没有装JRE的时候,运行java命令,Ubuntu 16.04会提示你可选择的JRE有哪些。填到上面的处即可。
安装完成后,比如OpenJDK,它的安装路径是:/usr/lib/jvm/java-8-openjdk-amd64/jre
1.2 下载Hadoop安装包和Hive安装包
去官网下载。速度太慢的话,弄个迅雷会员用迅雷下。不知道还有没有其他更好的办法。
apache-hive-2.3.3-bin.tar.gz hadoop-3.0.1.tar.gz
1.3 解压Hadoop安装文件到指定目录
cd /root
tar zxvf ./hadoop-3.0.1.tar.gz -C /usr/local
1.4 配置Hadoop
cd /usr/local/hadoop-3.0.1/etc/hadoop
vim hadoop-env.sh
# 配置这一句
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
# 然后可实验hadoop是否可用
cd /usr/local/hadoop-3.0.1
bin/hadoop version
1.5 有3种方式启动Hadoop
1.5.1 Local (Standalone) Mode (本地模式,或称Standalone模式)
默认情况下,Hadoop被配置为以非分布模式运行,作为单个Java进程。 这对调试很有用。
以下是Hadoop自带的一个Map-Reduce程序的运行示例:
(以下示例将解压后的conf目录复制为输入,然后查找并显示给定正则表达式的每个匹配项。 输出被写入到给定的输出目录。)
cd /usr/local/hadoop-3.0.1
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.1.jar grep input output 'dfs[a-z.]+'
cat output/*
1.5.2 Pseudo Distributed Mode (伪分布式模式)
我们要配的就是这个!
1.5.3 Fully Distributed Mode (全分布式模式)
这个是用于生产环境的,要多台机器。
2. 启动Hadoop
2.1 配置 /etc/profile
export HADOOP_HOME=/usr/local/hadoop-3.0.1
export PATH=${HADOOP_HOME}/bin:$PATH
export PDSH_RCMD_TYPE=ssh # 这一句是为了使pdsh使用ssh而不是rsh
然后使/etc/profile里配置的环境变量生效(export使得将来在子shell中也生效):
source /etc/profile
2.2 配置Hadoop
2.2.1 编辑 etc/core-site.html
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://dolphin01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/vdb/hadoop/tmp</value>
</property>
</configuration>
2.2.2 编辑 etc/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>dolphin01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/root/vdb/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/vdb/hadoop/tmp/dfs/data</value>
</property>
</configuration>
2.2.3 编辑 mapred-site.xml
vi etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>dolphin01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>dolphin01:19888</value>
</property>
</configuration>
2.2.4 编辑 yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>dolphin01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
2.2.5 在$HADOOP_HOME/sbin/start-all.sh, stop-all.sh, start-dfs.sh, start-yarn.sh 的顶部添加:
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在 start-yarn.sh 和 stop-yarn.sh 的顶部添加:
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
2.2.6 生成免密 (这是访问自己免密,因为都多个node都配在了同一台机器上)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
2.3 启动Hadoop服务
2.3.1 格式化namenode和datanode
cd $HADOOP_HOME/bin
./hadoop namenode -format
./hadoop datanode -format
2.3.2 启动Hadoop服务
cd $HADOOP_HOME/sbin
./start-all.sh
./mr-jobhistory-daemon.sh start historyserver
2.3.3 查看是否启动成功
可以用jps命令来查看:
root@dolphin01:/usr/local/hadoop-3.0.1/sbin# jps
18209 SecondaryNameNode
17843 NameNode
19413 NodeManager
17975 DataNode
19117 ResourceManager
19598 Jps
也可以用以下命令来验证:
hadoop dfsadmin -report
3. 安装与配置Hive
3.1 安装MySQL
这是为了使用MySQL替换原来默认的Derby数据库作为Hive的元数据库
apt install mysql-server mysql-client
# 安装过程中设置root密码为 hadoop
3.2 修改MySQL的权限
进入MySQL
use mysql;
grant all PRIVILEGES on *.* to root@'%' identified by 'root';
flush privileges;
3.3 创建Linux用户
usradd hive
passwd hive
3.4 在Mysql中运行
CREATE DATABASE hive;
CREATE USER 'hive' IDENTIFIED BY 'hive';
grant all privileges on *.* to 'hive' identified by 'hive';
flush privileges;
3.5 解压hive安装包
cd /root
tar zxvf apache-hive-2.3.3-bin.tar.gz -C /usr/local/
cd /usr/local
mv apache-hive-2.3.3-bin hive-2.3.3
3.6 配置 /etc/profile
部分项目在上一节安装Hadoop时已经配置过了,这里给出最终配置:
export HADOOP_HOME=/usr/local/hadoop-3.0.1
export HADOOP_CONF_HOME=$HADOOP_HOME/etc/hadoop
export PDSH_RCMD_TYPE=ssh
export HIVE_HOME=/usr/local/hive-2.3.3
export HIVE_CONF_DIR=/usr/local/hive/conf
export PATH=${HADOOP_HOME}/bin:${HIVE_HOME}/bin:$PATH
最后,令以上配置生效:
source /etc/profile
3.7 创建Hive将来使用的目录
cd /root/vdb
mkdir -p ./hive/tmp/resources
3.8 创建hdfs目录给Hive使用
hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /user/hive/warehouse
3.9 新建用户组,并在HDFS上进行赋权
groupadd hadoop
usermod -G hadoop hive
hadoop fs -chown -R hive:hadoop /user/hive/warehouse
hadoop fs -chown -R hive:hadoop /tmp/hive/
hadoop fs -chmod 755 /user/hive/warehouse
hadoop fs -chmod 777 /tmp/hive/
hadoop fs -mkdir -p /user/hive/log
hadoop fs -chmod 777 /user/hive/log
3.10 配置Hive
3.10.1 准备工作
cd $HIVE_HOME/conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
3.10.2 配置 hive-site.xml
这一步的配置是整个安装配置过程中最为繁杂的地方。以下列出各处配置:
3.10.2.1 搜索hive.exec.scratchdir, 将该name对应的value修改为/user/hive/tmp
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
3.10.2.2 搜索hive.querylog.location,将该name对应的value修改为/user/hive/log/hadoop
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log/hadoop</value>
<description>Location of Hive run time structured log file</description>
</property>
3.10.2.3 搜索javax.jdo.option.connectionURL,将该name对应的value修改为MySQL的地址
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.252.124:3306/hive?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
3.10.2.4 搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
3.10.2.5 搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
3.10.2.6 搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
<description>password to use against metastore database</description>
</property>
3.10.3 创建tmp文件
mkdir $HIVE_HOME/tmp
并在 hive-site.xml 中修改:
- 把{system:java.io.tmpdir} 改成 /usr/local/hive-2.3.3/tmp
- 把 {system:user.name} 改成 {user.name}
3.10.4 编辑 hive-env.sh
vi hive-env.sh
HADOOP_HOME=/usr/local/hadoop-3.0.1
export HIVE_CONF_DIR=/usr/local/hive-2.3.3/conf
export HIVE_AUX_JARS_PATH=/usr/local/hive-2.3.3/lib
3.11 下载Mysql connector
cd $HIVE_HOME/lib
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar
3.12 初始化MySQL中的Hive数据库
cd $HIVE_OHME/bin
./schematool -initSchema -dbType mysql
3.13 运行hive
hive
4. 参考文献
(完)