0.环境介绍:
1)ubuntu14.04 docker镜像
地址:https://github.com/gaojunhao/ubuntu14.04
2)hadoop2.7.3
地址:http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.7.3/hadoop-2.7.3-src.tar.gz
3)JDK1.8
这里下载的是jdk-8u74-Linux-x64.gz
地址:http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html
4)docker 17.03.0-ce for ubuntu
地址:https://store.docker.com/editions/community/docker-ce-server-ubuntu?tab=description
5)hive1.2.1
地址:http://www-eu.apache.org/dist/hive/hive-1.2.1/
6)mysql 5.5.54
7)weave1.9.3
地址:https://www.weave.works/docs/net/latest/installing-weave/
1.安装
1)docker 安装
apt-get install -y curl curl -sSL https://get.docker.com/|sh usermod -aG docker $(whoami)
2)运行ubuntu14.04镜像
docker run -it -h master ubuntu:14.04
3)安装jdk1.8
docker cp /jdk-8u74-linux-x64.gz containerid:/home/ubuntu/jdk-8u74-linux-x64.gz
tar -zxvf jdk-8u74-linux-x64.gz
3.1)配置环境变量
vim /etc/profile
export JAVA_HOME=/home/ubuntu/jdk1.8.0_74 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
3.2)jdk测试
source /etc/profile
java -version
显示以下则配置正确
Javaversion "1.8.0_74" Java(TM) SE Runtime Environment (build 1.8.0_74-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)4)hadoop2.7.3安装
docker cp /hadoop-2.7.3-src.tar.gz containerid:/home/ubuntu/hadoop-2.7.3-src.tar.gz
tar -zxvf hadoop-2.7.3-src.tar.gz
4.1)环境变量配置
vim /etc/profile
export HADOOP_HOME=/soft/apache/hadoop/hadoop-2.7.3 export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
source /etc/profile
4.2)hosts文件
vim /etc/host-tmp
添加以下:
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 master 172.17.0.3 slaver1 172.17.0.4 slaver2
保存后
vim /init.sh
添加以下:
#!/bin/sh rm /etc/hosts cat /etc/host-tmp >> /etc/hosts /etc/init.d/networking restart
4.3)ssh免密登录
参照:http://blog.csdn.net/ab198604/article/details/8250461
本文摘取该博文ssh免密登录设置部分
SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数
据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,想要破解还是非常有难度的。Hadoop集群的各个结点之间需要进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方法通过密钥验证及数据加解密的方式进行远程安全登录操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免密码的方法直接远程连入被访问结点,这样将大大提高访问效率。
(1) 每个结点分别产生公私密钥。
键入命令:
以上命令是产生公私密钥,产生目录在用户主目录下的.ssh目录中,如下:
Id_dsa.pub为公钥,id_dsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:
用上述同样的方法在剩下的两个结点中如法炮制即可。
(2) 单机回环ssh免密码登录测试
即在单机结点上用ssh进行登录,看能否登录成功。登录成功后注销退出,过程如下:
注意标红圈的指示,有以上信息表示操作成功,单点回环SSH登录及注销成功,这将为后续跨子结点SSH远程免密码登录作好准备。
用上述同样的方法在剩下的两个结点中如法炮制即可。
(3) 让主结点(master)能通过SSH免密码登录两个子结点(slave)
为了实现这个功能,两个slave结点的公钥文件中必须要包含主结点的公钥信息,这样
当master就可以顺利安全地访问这两个slave结点了。操作过程如下:
如上过程显示了node1结点通过scp命令远程登录master结点,并复制master的公钥文件到当前的目录下,这一过程需要密码验证。接着,将master结点的公钥文件追加至authorized_keys文件中,通过这步操作,如果不出问题,master结点就可以通过ssh远程免密码连接node1结点了。在master结点中操作如下:
由上图可以看出,node1结点首次连接时需要,“YES”确认连接,这意味着master结点连接node1结点时需要人工询问,无法自动连接,输入yes后成功接入,紧接着注销退出至master结点。要实现ssh免密码连接至其它结点,还差一步,只需要再执行一遍ssh node1,如果没有要求你输入”yes”,就算成功了,过程如下:
如上图所示,master已经可以通过ssh免密码登录至node1结点了。
对node2结点也可以用同样的方法进行,如下图:
Node2结点复制master结点中的公钥文件
Master通过ssh免密码登录至node2结点测试:
第一次登录时:
第二次登录时:
表面上看,这两个结点的ssh免密码登录已经配置成功,但是我们还需要对主结点master也要进行上面的同样工作,这一步有点让人困惑,但是这是有原因的,具体原因现在也说不太好,据说是真实物理结点时需要做这项工作,因为jobtracker有可能会分布在其它结点上,jobtracker有不存在master结点上的可能性。
对master自身进行ssh免密码登录测试工作:
至此,SSH免密码登录已经配置成功。
4.4)修改hadoop配置文件
cd $HADOOP_HOME/etc/hadoop/
4.4.1.hadoop-env.sh
export JAVA_HOME=/home/ubuntu/jdk1.8.0_74
4.4.2.slaves
添加以下:
localhost slaver1 slaver2
4.4.3.core-site.xml
添加以下:
<property> <name>hadoop.tmp.dir</name> <value>/soft/apache/hadoop/hadoop-2.7.3/tmp</value> <description>A base for other temporary directories.</description> </property>
4.4.4.hdfs-site.xml
添加以下:
<property> <name>dfs.namenode.name.dir</name> <value>/soft/apache/hadoop/hadoop-2.7.3/namenode</value> <final>true</final> </property> <property> <name>dfs.datanode.data.dir</name> <value>/soft/apache/hadoop/hadoop-2.7.3/datanode</value> <final>true</final> </property>
4.5)保存docker镜像
docker ps 查看当前启动的镜像id
docker commit containerid hadoop:master
docker commit containerid hadoop:slaver1
docker commit containerid hadoop:slaver2
4.6)格式化namenode
docker run -it -h master hadoop:master
docker run -it -h slaver1 hadoop:slaver1
docker run -it -h slaver2 hadoop:slaver2
在master节点
hadoop namenode -format
上面只要出现successfully formatted则格式化成功了.
4.7)启动hadoop
start-dfs.sh
start-yarn.sh
4.8)jps检测后台程序是否启动成功
jps
master节点
root@master:/# jps 201 NameNode 1264 Jps 1108 ResourceManager 526 SecondaryNameNode 316 DataNode 1224 NodeManager slaver节点
root@slaver1:/# jps 276 NodeManager 401 Jps 109 DataNode
root@slaver2:/# jps 276 NodeManager 401 Jps 109 DataNode
如果namenode datanode节点没有启动
参照:http://blog.csdn.net/lu8000/article/details/46313231
http://blog.csdn.net/asia_kobe/article/details/50902812
http://www.cnblogs.com/kinglau/p/3796274.html
4.9)hadoop pi 测试
cd $HADOOP_HOME
root@master:/soft/apache/hadoop/hadoop-2.7.3/share/hadoop/mapreduce# hadoop jar hadoop-mapreduce-examples-2.7.3.jar pi 10 10
如果遇到run job一直运行不下去,检查下磁盘使用率是不是超过了90%,可以增大一些可用磁盘率.
5)hive安装
5.0)安装情况介绍
master节点作为server,slaver节点作为client
master节点安装mysql hive,slaver节点安装hive
5.1)mysql安装
5.1.1.sudo apt-get install mysql-server
5.1.2.apt-get isntall mysql-client
5.1.3.sudo apt-get install libmysqlclient-dev
5.1.4.启动mysql服务
service mysql start
5.1.5.登录mysql
mysql -uroot -phivepass(username=root,password=hivepass)5.2)hive安装
5.2.1.hive安装
docker cp /apache-hive-1.2.1-bin.tar.gz containerid:/usr/local/
tar -zxvf apache-hive-1.2.1-bin.tar.gz
5.2.2.环境变量配置
vim /etc/profile
添加以下:
export HIVE_HOME=/usr/local/apache-hive-1.2.1-bin export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
5.2.3.hive配置文件
5.2.3.1配置文件重命名
cd $HIVE_HOME/conf
cp hive-default.xml.template hive-site.xml 5.2.3.2修改hive-site.xml修改以下项:
<property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/tmp</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/tmp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property>
<property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property>
<property> <name>javax.jdo.option.ConnectionPassword</name> <value>hivepass</value> <description>password to use against metastore database</description> </property>
<property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property>
<property> <name>hive.server2.thrift.bind.host</name> <value>172.17.0.2</value> <description>Bind host on which to run the HiveServer2 Thrift service.</description> </property>
5.2.4.hive 元数据
mysql-connector-java-5.1.39.jar下载地址:
https://dev.mysql.com/downloads/connector/j/
将 mysql-connector-java-5.1.39.jar 放入 $HIVE_HOME/lib 下
5.2.5.为hive创建hdfs目录
在 Hive 中创建表之前需要使用以下 HDFS 命令创建 /tmp 和 /user/hive/warehouse (hive-site.xml 配置文件中属性项 hive.metastore.warehouse.dir 的默认值) 目录并给它们赋写权限
hdfs dfs -mkdir /tmp hdfs dfs -mkdir /usr/hive/warehouse hdfs dfs -chmod g+w /tmp hdfs dfs -chmod g+w /usr/hive/warehouse 5.2.6.运行hive5.2.6.1先运行 schematool 命令来执行初始化操作
schematool -dbType mysql -initSchem 5.2.6.2启动mysql server服务service mysql start
5.2.6.3启动hive
输入hive
出现如下则hive安装成功
Logging initialized using configuration in file:/usr/local/apache-hive-1.2.1-bin/conf/hive-log4j.properties hive>
5.2.7slaver节点安装hive
1)hive安装
docker cp /apache-hive-1.2.1-bin.tar.gz containerid:/usr/local/
tar -zxvf apache-hive-1.2.1-bin.tar.gz
2)环境变量配置
vim /etc/profile
添加以下:
export HIVE_HOME=/usr/local/apache-hive-1.2.1-bin export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
3)hive配置文件
3.1)配置文件重命名
cd $HIVE_HOME/conf
cp hive-default.xml.template hive-site.xml 3.2)修改hive-site.xml修改以下项:
<property> <name>hive.exec.scratchdir</name> <value>/tmp/hive</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/tmp</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/tmp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://172.17.0.2:3306/hive?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property>
<property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property>
<property> <name>javax.jdo.option.ConnectionPassword</name> <value>hivepass</value> <description>password to use against metastore database</description> </property>
<property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property>
<property> <name>hive.server2.thrift.bind.host</name> <value>172.17.0.2</value> <description>Bind host on which to run the HiveServer2 Thrift service.</description> </property>
<property> <name>hive.metastore.uris</name> <value>thrift://172.17.0.2:9083</value> </property>
4)hive 元数据
mysql-connector-java-5.1.39.jar下载地址:
https://dev.mysql.com/downloads/connector/j/
将 mysql-connector-java-5.1.39.jar 放入 $HIVE_HOME/lib 下
5)为hive创建hdfs目录
在 Hive 中创建表之前需要使用以下 HDFS 命令创建 /tmp 和 /user/hive/warehouse (hive-site.xml 配置文件中属性项 hive.metastore.warehouse.dir 的默认值) 目录并给它们赋写权限
hdfs dfs -mkdir /tmp hdfs dfs -mkdir /usr/hive/warehouse hdfs dfs -chmod g+w /tmp hdfs dfs -chmod g+w /usr/hive/warehouse5.2.7启动metastore
参照:http://blog.csdn.net/reesun/article/details/8556078
master节点
service mysql start
root@master:/# hive --service metastore Starting Hive Metastore Server slaver节点
输入hive
root@slaver1:/tmp/root# hive Logging initialized using configuration in file:/usr/local/apache-hive-1.2.1-bin/conf/hive-log4j.properties hive> 5.2.8启动hiveserver2
master节点
service mysql start
slaver节点
root@slaver1:/# beeline Beeline version 1.2.1 by Apache Hive beeline> !connect jdbc:hive2://172.17.0.2:10000/default Connecting to jdbc:hive2://172.17.0.2:10000/default Enter username for jdbc:hive2://172.17.0.2:10000/default: root Enter password for jdbc:hive2://172.17.0.2:10000/default: Connected to: Apache Hive (version 1.2.1) Driver: Hive JDBC (version 1.2.1) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://172.17.0.2:10000/default>
出现以上则证明hiveserver2正常启动
6)weave安装
使用weave进行真正的完全分布式安装
6.1weave安装
要求:网络已翻墙
master slaver节点均需要安装
1.sudo wget -O /usr/local/bin/weave https://raw.githubusercontent.com/zettio/weave/master/weave 2.sudo chmod a+x /usr/local/bin/weave
6.2weave启动 1.master节点所在主机 weave launch 2.slaver节点所在主机 weave launch master_ip 3.检查 netstat -na | grep 6783 6.3载入镜像 docker import hiveClient.tar docker import hiveServer.tar 6.4运行容器 1.slaver节点 weave run 10.0.0.3/24 -it -h slaver1 --net=none hive:client weave run 10.0.0.4/24 -it -h slaver2 --net=none hive:client docker attach containerid ./init.sh 2.master节点 weave run 10.0.0.2/24 -it -h master --net=none hive:server docker attach containerid ./init.sh 6.5暴露主机端口 weave expose 10.0.0.100/24(将本机加入weave子网) 6.6启动dfs yarn start-dfs.sh start-yarn.sh jps
注意:不要使用172.17.0.2等docker使用的ip,防止冲突,所以前面设置的172.17.0.2等需要改为10.0.0.2等.