从0开始搭建Hadoop 3.0.1 和 Hive 2.3.3 环境

前言

要帮某人搭建一个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. 参考文献

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值