一、hadoop安装所需环境
操作系统集群配置
搭建3节点完全分布式集群,即1个nameNode,2个dataNode,分别如下:
主机名 | IP | 描述 |
---|---|---|
master | 10.221.101.1 | NameNode |
slave1 | 10.221.101.2 | DataName |
slave2 | 10.221.101.3 | DataNode |
注意:创建文件或目录后,访问它节点会有权限问题,所以不建议创建,建议使用scp命令
1、创建虚拟机CentOS7并安装配置JDK,克隆两台
2、修改主机名:master、slave1、slave2
3、设置静态:10.221.101.1、10.221.101.2、10.221.101.3
4、关闭防火墙
5、免密设置
每台节点生成公钥:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
master中将公钥id_dsa.pub添加进keys,实现master免密:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
将master中公钥分别添加到slave1及slave2的keys中,实现master对slave1及slave2节点免密:
scp ~/.ssh/id_dsa.pub root@slave1: /opt/
cat /opt/id_dsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/id_dsa.pub root@slave2: /opt/
cat /opt/id_dsa.pub >> ~/.ssh/authorized_keys
master执行 如下命令,进行验证
ssh master
ssh slave1
ssh slave2
6、组件所用版本
hadoop-2.7.3
zookeeper-3.4.10
hbase-1.3.1
hive-2.1.1:-mysql
spark-2.1.0:scala
zookepper用于hbase及hive
组件安装路径:mkdir /usr/local/hadoop
二、hadoop-2.7.3安装
安装路径:mkdir /usr/local/hadoop/hadoop-2.7.3/bin/
1、解压hadoop
tar -xzvf hadoop-2.7.3/ -C /usr/local/hadoop/
2、 执行命令检查hadoop是否可用
cd /usr/local/hadoop/hadoop-2.7.3/bin/
查看是否显示hadoop版本信息Hadoop 2.7.3 显示即正常
hadoop version
3、创建所需目录
cd /usr/local/hadoop/hadoop-2.7.3
mkdir -pv tmp/dfs/{ data, name }
4、设置hadoop环境变量
vi /etc/profile
# Hadoop
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.3
#Path
PATH=PATH:JAVA_HOME/bin:JRE_HOME/binHADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
任意目录输入 hado,然后按Tab,如果自动补全为hadoop,则说明环境变量配正确
同步到其他节点上
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
5、修改hadoop配置文件
cd /usr/local/hadoop/hadoop-2.7.3/etc/hadoop/
—hadoop-env.sh
vi hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.8.0_92
—core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.3/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<!--指定可以在任何IP访问-->
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<!--指定所有用户可以访问-->
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
—hdfs-site.xml
vi hdfs-site.xml
<configuration>
<!--指定namenode名称空间的存储地址-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.3/hdfs/name</value>
</property>
<!--指定datanode数据存储地址-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/hadoop-2.7.3/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
—mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<!-- 配置MapReduce运行于yarn中 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
—yarn-env.sh
vi yarn-env.sh
# some Java parameters
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.8.0_92
—yarn-site.xml
vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
— slaves
vi salves
将localhost删掉,加入如下内容,即dataNode节点的hostname
slave1
slave2
6、 以上配置同步到slave1,slave2中
scp -r /usr/local/hadoop root@slave1:/usr/local
scp -r /usr/local/hadoop root@slave2:/usr/local
7、启动hadoop
— 首次启动需要先在 master 节点进行 NameNode 的格式化:
cd /usr/local/hadoop/hadoop-2.7.3/bin
hdfs namenode -format
— 在master机器上,进入hadoop的sbin目录
cd /usr/local/hadoop/hadoop-2.7.3/sbin
./start-all.sh
8、查看是否启动成功
—jps 查看当前java的进程
输入jps 查看当前java的进程,列出当前java进程的PID和Java主类名,nameNode节点除了JPS,有3个进程
[root@master sbin]# jps
16178 NameNode
16375 SecondaryNameNode
16502 ResourceManager
16749 Jps
在slave1和slave2节点上分别输入 jps 查看进程如下,说明配置成功
[root@slave1 ~]# jps
15866 DataNode
15964 NodeManager
16061 Jps
— 查看运行状况
在浏览器访问nameNode节点的8088端口和50070端口可以查看hadoop的运行状况
192.168.1.110:50070
192.168.1.110:8088
三、zookeeper-3.4.10安装
zookeeper集群搭建要至少3个节点(master,slave1, slave2),所以三台服务器都要部署zookeeper
1、解压到安装目录
tar -xzvf zookeeper-3.4.10.tar.gz -C /usr/local/hadoop/
2、添加环境变量
vi /etc/profile
#zooleeper
export ZOOKEEPER=/usr/local/hadoop/zookeeper-3.4.10
# Path
exportPATH=PATH:JAVA_HOME/bin:JRE_HOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin:ZOOKEEPER/bin
source /etc/profile
同步到其他节点上
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
3、 修改配置文件
/usr/local/hadoop/zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
删除原有内容
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/usr/local/storage/zookeeper/data
dataLogDir=/usr/local/storage/zookeeper/logs
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
4 、根据以上配置 创建zookeeper的数据文件和日志存放目录
mkdir -pv /usr/local/storage/zookeeper/{data,logs }
同步到其它节点
scp -r /usr/local/storage/zookeeper/{data,logs } root@slave1: /usr/local/storage/zookeeper/
5 、在三台zookeeper的/usr/local/storage/zookeeper/data目录下分别创建并编辑myid
—创建
touch myid
—编辑
vi myid
echo 1 > /usr/local/storage/zookeeper/data/myid
echo 2 > /usr/local/storage/zookeeper/data/myid
echo 3 > /usr/local/storage/zookeeper/data/myid
6 、将以上配置同步到其他hadoop节点
scp -r /usr/local/hadoop/zookeeper-3.4.10 root@slave1:/usr/local/hadoop/
scp -r /usr/local/hadoop/zookeeper-3.4.10 root@slave2:/usr/local/hadoop/
7、启动zookeeper
如果zookeeper集群还没有启动的话, 首先把各个zookeeper起来。最好三个节点上同时启动
cd /usr/local/hadoop/zookeeper-3.4.10/bin
./zkServer.sh start
./zkServer.sh status
(1个leader,2个follower)
输入jps,会显示启动进程:QuorumPeerMain
jps
四、Hive-2.1.1安装
前提安装mysql
1、解压到安装目录
tar -zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local/hadoop/
2、 添加环境变量
vi /etc/profile
#hive
export HIVE_HOME=/usr/local/hadoop/apache-hive-2.1.1-bin
# Path
export PATH=PATH:JAVA_HOME/bin:$JRE_HOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin:ZOOKEEPER/bin:HBASE_HOME/bin:$HIVE_HOME/bin
source /etc/profile
同步到其他节点上
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
3 、配置文件修改
cd /usr/local/hadoop/apache-hive-2.1.1-bin/conf
—hive-env.sh
cp hive-env.sh.template hive-env.sh
—hive-site.xml
cp hive-site.xml.template hive-site.xml
vi hive-site.xml
<configuration>
<!--在hdfs上hive数据存放目录,启动hadoop后需要在hdfs上手动创建-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://master:9000/user/hive/warehouse</value>
</property>
<property>
<name>datanucleus.readOnlyDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateColumns</name>
<value>true</value>
</property>
<!--通过jdbc协议连接mysql的hive库-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive
createDatabaseIfNotExist=trueuseSSL=false</value>
</property>
<!--jdbc的mysql驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--mysql用户密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<!--指定hive元数据访问路径,可以有多个,逗号分隔-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/local/storage/hive/exec</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/local/storage/hive/downloadedsource</value>
</property>
<!--hiveserver2的HA-->
<property>
<name>hive.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
</configuration>
4、 hive lib中添加所需jar包
cd /usr/local/hadoop/apache-hive-2.1.1-bin/lib/
—添加mysql驱动
cp /root/package/hadoop/mysql-connector-java-5.1.38.jar /usr/local/hadoop/apache-hive-2.1.1-bin/lib/
【以下可不配置】
—从hbase/lib下复制必要jar包
cp /usr/local/hadoop/hbase-1.3.1/lib/hbase-client-1.3.1.jar
/usr/local/hadoop/apache-hive-2.1.1-bin/lib/
cp /usr/local/hadoop/hbase-1.3.1/lib/hbase-common-1.3.1.jar /usr/local/hadoop/apache-hive-2.1.1-bin/lib/
—同步hive和hadoop的jline版本
cp /usr/local/hadoop/apache-hive-2.1.1-bin/lib/jline-2.12.jar
/usr/local/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib
查看版本
cd /home/hadoop/hadoop/share/hadoop/yarn/lib
find ./ -name "jlinejar"
若有低版本则删除
例如:jline 0.9 rm jline-0.9.94.jar
—复制jdk的tools.jar
cp $JAVA_HOME/lib/tools.jar /usr/local/hadoop/apache-hive-2.1.1-bin/lib/
5 、在配置的mysql中创建hive库
create database hive;
【需外界可连接上】
6 、hdfs创建存储数据的目录
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
7、 启动hive
hive 远程服务 (端口号10000) 启动方式[metastore和hiveserver2在同一台上启动即可]
nohup /usr/local/hive/bin/hive --service metastore &> metastore.log &
nohup /usr/local/hive/bin/hive --service hiveserver2 &> hiveserver2.log
hive 命令行模式
hive
或者输入
hive --service cli
查看进程为:2个RunJar
注意:可以在任意一台服务器上启动hive,都可以。
8 、查看启动进程
通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode进程
Jps
Master上:
29162 RunJar
28442 HMaster
28049 ResourceManager
28999 RunJar
27607 NameNode
29328 Jps
28571 HRegionServer
27448 QuorumPeerMain
27802 SecondaryNameNode
在 Slave 节点可以看到 DataNode 和 NodeManager 进程
Slave上:
30086 RunJar
28962 DataNode
29834 HRegionServer
30245 RunJar
28868 QuorumPeerMain
29075 NodeManager
程序启动成功后可以在任意一台启动hive
可以在启动MR-JobHistory服务,
sbin/mr-jobhistory-daemon.sh start historyserver
Hadoop2 MR-JobHistory服务介绍
1)MR-JobHistory服务目标
主要是向用户提供历史的mapred Job 查询
详细解释:
a)在运行MR Job时,MR 的 ApplicationMaster会根据mapred-site.xml配置文件中的配置,将MR Job的job history信息保存到指定的hdfs路径(首先保存到临时目录,然后mv到最终目录)
b)如果在yarn-site.xml中,没有配置nodemanage的LogAggregation功能,则historyserver无法提供mr日志明细查询的功能(在提交mr job时,yarn和mapred的配置都是必须的)
c)historyserver向外提供两个接口,web接口可以提供jobhistory和明细日志查询的功能,而restApi只提供jobhistory查询的功能
五、Hbase-1.3.1安装
1、 解压到安装目录
tar -zxvf hbase-1.3.1-bin.tar.gz -C /usr/local/hadoop/
2、添加环境变量
vi /etc/profile
#Hbase
export HBASE_HOME=/usr/local/hadoop/hbase-1.3.1
# Path
export PATH=PATH:JAVA_HOME/bin:JRE_HOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin:ZOOKEEPER/bin:$HBASE_HOME/bin
source /etc/profile
同步到其他节点上
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/
3、配置文件修改
/usr/local/hadoop/hbase-1.3.1/conf
—regionservers 文件
vi regionservers
master
slave1
slave2
—hbase-env.sh
vi hbase-env.sh
#The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_92
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# 禁用Hbase自带zookeeper
export HBASE_MANAGES_ZK=false
—hbase-site.xml
vi hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>master,slave1,slave2</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/usr/local/storage/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/storage/zookeeper/data</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>60010</value>
</property>
</configuration>
4、创建hbase-site.xml配置文件中的hbase目录
mkdir /usr/loca/storage/hbase
同步软件到其他节点
scp -r /usr/loca/storage/hbase root@slave1: /usr/loca/storage/
scp -r /usr/loca/storage/hbase root@slave2: /usr/loca/storage/
5、同步上述配置到其他节点
scp -r /usr/local/hadoop/hbase-1.3.1 root@slave1: /usr/local/hadoop/
scp -r /usr/local/hadoop/hbase-1.3.1 root@slave2: /usr/local/hadoop/
6、启动Hbase
—启动
/usr/local/hadoop/hbase-1.3.1/bin
./start-hbase.sh
—验证安装成功
hbase shell
—查看进程为:HMaster,HRegionServer
jps
主节点:HMaster,HRegionServer
从节点:HRegionServer
—通过web UI访问hbase状态
网友评论