大数据相关环境安装
一、基础准备
1、关闭防火墙等(所有虚拟机都执行)
1)、关闭 firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
2)、关闭 selinux
getenforce
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
# 重启虚拟机
reboot
2、修改 hostname 和 hosts(所有虚拟机都执行)
1)、vim /etc/hostname
hp1
2)、使 hostname 生效
重启虚拟机
reboot
或执行以下命令,然后重新登录
hostnamectl set-hostname hp1
3)、vim /etc/hosts
192.168.1.11 hp1
192.168.1.12 hp2
192.168.1.13 hp3
3、设置免密
1)、生成秘钥对
ssh-keygen
2)、将公钥拷贝到其他节点实现免密
ssh-copy-id hp1
ssh-copy-id hp2
ssh-copy-id hp3
4、安装 mysql 数据库
1)、安装 mariadb-server
yum install -y mariadb-server
2)、开机启用、启动 mariadb、查看状态
systemctl enable mariadb
systemctl start mariadb
systemctl status mariadb
3)、初始化 mysql 数据库
mysql_secure_installation
Enter current password for root (enter for none): (enter)
Change the root password? [Y/n] (y)
New password: (qwe)
Re-enter new password: (qwe)
Remove anonymous users? [Y/n] (n)
Disallow root login remotely? [Y/n] (n)
Remove test database and access to it? [Y/n] (y)
Reload privilege tables now? [Y/n] (y)
4)、连接测试
mysql -uroot -pqwe
二、开始安装
1、解压相关软件包
mkdir -p /usr/local/src
tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/src
mv /usr/local/src/hadoop-2.6.0 /usr/local/src/hadoop
tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /usr/local/src
mv /usr/local/src/apache-hive-1.1.0-bin /usr/local/src/hive
tar -zxvf hbase-1.2.0-bin.tar.gz -C /usr/local/src
mv /usr/local/src/hbase-1.2.0 /usr/local/src/hbase
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local/src
mv /usr/local/src/sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/src/sqoop
tar -zxvf jdk1.8.0_111.tar.gz -C /usr/local/src
mv /usr/local/src/jdk1.8.0_111 /usr/local/src/jdk
tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/src
mv /usr/local/src/zookeeper-3.4.5 /usr/local/src/zookeeper
2、修改环境变量
1)、vim /etc/profile (在文件后面追加)
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export HBASE_HOME=/usr/local/src/hbase
export SQOOP_HOME=/usr/local/src/sqoop
export HIVE=/usr/local/src/hive
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$SQOOP_HOME/bin:$HIVE/bin
使环境变量生效
source /etc/profile
注意:别漏掉PATH=$PATH,否则 linux 环境会出问题
scp -r /etc/profile hp2:/etc
scp -r /etc/profile hp3:/etc
# 分别使环境变量生效
source /etc/profile
3、配置 zookeeper
1)、进入配置文件目录
cd /usr/local/src/zookeeper/conf
2)、复制配置文件
cp zoo_sample.cfg zoo.cfg
3)、修改配置文件,(vim zoo.cfg)
dataDir 数据存放路径
tickTime=2000
clientPort=2181
initLimit=5
syncLimit=2
<!-- 以上可选 -->
dataDir=/usr/local/src/zookeeper/data
server.0=hp1:2888:3888
server.1=hp2:2888:3888
server.2=hp3:2888:3888
接下来分别在 hp1、hp2、hp3 节点上的/usr/local/src/zookeeper/data 目录下创建一 个名为 myid 的文件,并在hp1节点上的 myid 文件里输入 0,在hp2节点上的myid输入 1,在hp3节点上的 myid 文件里输入 2
mkdir /usr/local/src/zookeeper/data
echo 0 >> /usr/local/src/zookeeper/data/myid
4)、拷贝jdk、 zookeeper 配置到所有其他节点
scp -r /usr/local/src/jdk hp2:/usr/local/src/
scp -r /usr/local/src/jdk hp3:/usr/local/src/
scp -r /usr/local/src/zookeeper hp2:/usr/local/src/
scp -r /usr/local/src/zookeeper hp3:/usr/local/src/
5)、每个节点启动zkserver
zkServer.sh start
[root@hp1 ~]# jps
12427 Jps
12380 QuorumPeerMain
验证 ZooKeeper 服务,三台节点必须是 1 个 leader 2 个 follower 的状态才算配置正确
zkServer.sh status
[root@hp2 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@hp1 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@hp3 ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/src/zookeeper/bin/../conf/zoo.cfg
Mode: follower
4、安装 hadoop
1)、进入配置文件目录
cd /usr/local/src/hadoop/etc/hadoop
2)、编辑 hadoop-env.sh,添加以下内容。(vim hadoop-env.sh)
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
3)、编辑 slaves,将 slave 的主机名写入到该文件中。(vim slaves)
hp3
4)、编辑 core-site.xml,(vim core-site.xml)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hp1:2181,hp2:2181,hp3:2181</value>
</property>
</configuration>
5)、编辑 hdfs-site.xml,(vim hdfs-site.xml)
<configuration>
<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- ns下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>hp1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>hp1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>hp2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>hp2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hp1:8485;hp2:8485;hp3:8485/ns</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/hdfs/journal</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>file:/usr/local/src/hadoop/dfs/data</value>
</property>
</configuration>
6)、复制一份 mapred-site.xml 配置文件.
cp mapred-site.xml.template mapred-site.xml
编辑配置文件 mapred-site.xml,(vim mapred-site.xml)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7、)编辑 yarn-site 配置文件,(vim yarn-site.xml)
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hp1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hp2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hp1:2181,hp2:2181,hp3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
8、)拷贝配置到所有其他节点
scp -r /usr/local/src/hadoop hp2:/usr/local/src/
scp -r /usr/local/src/hadoop hp3:/usr/local/src/
注意:hp2、hp3 的 /usr/local/src/ 目录不存在时,需先创建
9)、HA 模式启动服务
1、首先启动各个节点的 Zookeeper,在各个节点执行以下命令
zkServer.sh start
[root@hp1 ~]# jps 2147 QuorumPeerMain 2277 Jps
2、在各个节点启动 journalnode 服务,在各个节点执行以下命令
hadoop-daemon.sh start journalnode
[root@hp1 ~]# jps 2336 Jps 2147 QuorumPeerMain 2301 JournalNode
3、在主 namenode 节点(hp1)格式化 namenode 和 journalnode 目录
hdfs namenode -format
19/11/05 09:30:11 INFO common.Storage: Storage directory /usr/local/src/hadoop/dfs/name has been successfully formatted. 19/11/05 09:30:13 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 19/11/05 09:30:13 INFO util.ExitUtil: Exiting with status 0 19/11/05 09:30:13 INFO namenode.NameNode: SHUTDOWN_MSG:
成功的话,会看到 "successfully formatted" 或 "Exitting with status 0" 的提示,若为 "Exitting with status 1" 则是出错。
4、在某一个 namenode 节点(hp1)执行如下命令,创建命名空间
hdfs zkfc -formatZK
Proceed formatting /hadoop-ha/ns? (Y or N) 19/11/05 09:31:16 INFO ha.ActiveStandbyElector: Session connected. y 19/11/05 09:31:46 INFO ha.ActiveStandbyElector: Recursively deleting /hadoop-ha/ns from ZK... 19/11/05 09:31:47 INFO ha.ActiveStandbyElector: Successfully deleted /hadoop-ha/ns from ZK. 19/11/05 09:31:47 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns in ZK.
5、在主 namenode 节点(hp1)启动 namenode 进程
hadoop-daemon.sh start namenode
[root@hp1 ~]# hadoop-daemon.sh start namenode starting namenode, logging to /usr/local/src/hadoop/logs/hadoop-root-namenode-hp1.out [root@hp1 ~]# jps 2147 QuorumPeerMain 2500 NameNode 2596 JournalNode 2630 Jps
6、在备 namenode 节点 (hp2)执行第一行命令,这个是把备 namenode 节点的目录格式化并把元数据从主 namenode 节点 copy 过来,并且这个命令不会把 journalnode 目录再格式化了!然后用第二个命令启动备 namenode 进程!
hdfs namenode -bootstrapStandby
# 19/11/05 09:34:46 INFO util.ExitUtil: Exiting with status 0
hadoop-daemon.sh start namenode
[root@hp2 ~]# jps 1619 JournalNode 1749 NameNode 1785 Jps 1533 QuorumPeerMain
7、在两个 namenode 节点(hp1,hp2)都执行以下命令
hadoop-daemon.sh start zkfc
2147 QuorumPeerMain 2500 NameNode 2596 JournalNode 2681 DFSZKFailoverController 2734 Jps
8、在所有 datanode 节点都执行以下命令启动 datanode
hadoop-daemon.sh start datanode
1665 DataNode 1733 Jps 1514 QuorumPeerMain 1595 JournalNode
9、启动 yarn (hp1)
start-yarn.sh
10、查看 namenode 状态
hdfs haadmin -getServiceState nn1 hdfs haadmin -getServiceState nn2
11、查看集群状态
如果 Live datanode 不为 0,则说明集群启动成功
hdfs dfsadmin -report
12、web 页面访问 hadoop
hp1 为对应的ip 地址
- hadoop 地址
- yarn 地址
- hbase 地址
5、hadoop 使用测试
mkdir input
echo "hello world">./input/test1.txt
echo "hello hadoop">./input/test2.txt
hdfs dfs -mkdir /in
hdfs dfs -put input/ /in
hadoop jar /usr/local/src/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /in/input /out
hdfs dfs -cat /out/*
6、配置sqoop
1)、进入配置文件目录
cd /usr/local/src/sqoop/conf
2)、复制环境变量 sqoop-env.sh 文件
cp sqoop-env-template.sh sqoop-env.sh
3)、修改配置文件 (vim sqoop-env.sh )
没用到 Hive 和 HBase 可以不用配置相关项,使用时会弹出警告
export HADOOP_COMMON_HOME=/usr/local/src/hadoop
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export ZOOCFGDIR=/usr/local/src/zookeeper/conf
export HBASE_HOME=/usr/local/src/hbase
4)、 复制 mysql 数据库驱动包到指定文件路径
cp mysql-connector-java-5.1.46-bin.jar /usr/local/src/sqoop/lib/
5)、验证
sqoop version
6)、链接测试
sqoop list-databases --connect jdbc:mysql://hp1:3306/ --username root --password qwe
7)、将 mysql 中数据导入到 hdfs 中
mysql -uroot -pqwe
create database hotels;
use hotels;
CREATE TABLE IF NOT EXISTS `hotel`(
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`diamond` VARCHAR(255) NOT NULL,
`last_order` VARCHAR(255) NOT NULL,
`address` VARCHAR(255) NOT NULL,
`score` VARCHAR(255) NOT NULL,
`level` VARCHAR(255) NOT NULL,
`recommend` VARCHAR(255) NOT NULL,
`commend_people` VARCHAR(255) NOT NULL,
`commend` VARCHAR(255) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into hotel (name,diamond,last_order,address,score,level,recommend,commend_people,commend) values ('长沙华晨豪生大酒店','豪华型','最新预订:2分钟前','雨花区万家丽中路二段8号(长沙大道与万家丽中路交叉处、近高桥居然之家)。','4.7','很好','98%','903','早餐丰富')
sqoop import \
--connect jdbc:mysql://hp1:3306/hotels \
--username root \
--password qwe \
--table hotel \
-m 1
7、配置hbase
1)、进入配置文件目录
cd /usr/local/src/hbase/conf
2)、编辑(vim hbase-env.sh)
export JAVA_HOME=/usr/local/src/jdk
3)、编辑 (vim hbase-site.xml)
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hp1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hp1,hp2,hp3</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/src/zookeeper/data/</value>
</property>
</configuration>
4)、编辑 (vim regionservers)
hp1
hp2
hp3
5)、将hbase所有配置拷贝到其他所有节点
scp -r /usr/local/src/hbase/ hp2:/usr/local/src/
scp -r /usr/local/src/hbase/ hp3:/usr/local/src/
6)、启动 hbase
启动 HBase 时需要确保 hdfs 已经启动,使用命令 hdfs dfsadmin -report 查看以下 HDFS 集群是否正常
如果正常,在 master 节点上执行以下命令启动 HBase 集群:
start-hbase.sh
3924 HMaster
4038 HRegionServer
7)、测试
hbase shell
8)、web 访问 hbase
http://hp1:16010
8、配置 hive
1)、进入配置文件目录
cd /usr/local/src/hive/conf
2)、复制配置文件
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
# 创建文件夹,hive-site.xml 中配置需要
mkdir -p /usr/local/src/hive/tmp
3)、编辑 (vim hive-env.sh)
export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive
export HIVE_CONF_DIR=/usr/local/src/hive/conf
4)、编辑 (vim hive-site.xml)
注意修改数据库连接密码 qwe
没有的 property 则添加,有的则根据需求修改
<configuration>
<property>
<name>system:java.io.tmpdir</name>
<value>/usr/local/src/hive/tmp</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hp1:3306/hive?createDatabaseIfNotExist=true</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>qwe</value>
</property>
</configuration>
sed -i "s#\${system:java.io.tmpdir}/\${system:user.name}#/usr/local/src/hive/iotmp#g" /usr/local/src/hive/conf/hive-site.xml
5)、 复制 mysql 数据库驱动包到指定文件路径
cp mysql-connector-java-5.1.46-bin.jar /usr/local/src/hive/lib/
6)、在 hdfs 中创建下面的目录 ,并赋予所有权限
hdfs dfs -mkdir -p /usr/local/src/hive/warehouse
hdfs dfs -mkdir -p /usr/local/src/hive/tmp
hdfs dfs -mkdir -p /usr/local/src/hive/log
hdfs dfs -chmod -R 777 /usr/local/src/hive/warehouse
hdfs dfs -chmod -R 777 /usr/local/src/hive/tmp
hdfs dfs -chmod -R 777 /usr/local/src/hive/log
7)、初始化 hive
schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://hp:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 1.1.0
Initialization script hive-schema-1.1.0.mysql.sql
Initialization script completed
schemaTool completed
如果没有以上返回,则初始化失败,见常见问题
8)、安装hive到此结束,进入hive命令行
hive
9)、常见问题
因为版本原因,需要重新拷贝一个 jar 包
rm -rf /usr/local/src/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar
cp /usr/local/src/hive/lib/jline-2.12.jar /usr/local/src/hadoop/share/hadoop/yarn/lib/
初始化后如果想要再重启服务
hive --service metastore &
hive --service hiveserver2 &
这个在1.4.7中需要配置,否则在执行数据导入到hive时会报错
Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
cp /usr/local/src/hive/lib/hive-exec-1.1.0.jar /usr/local/src/sqoop/lib/
9、重启 hadoop 相关环境
1、启动各个节点(hp1、hp2、hp3)的zookeper服务
zkServer.sh start
zkServer.sh status
2、启动各个节点(hp1、hp2、hp3)的 journalnode 服务
hadoop-daemon.sh start journalnode
3、启动主节点(hp1)的 namenode 服务
hadoop-daemon.sh start namenode
4、启动备用节点(hp2)的 namenode 服务
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
5、启动各个节点(hp1、hp2、hp3)的 datanode 服务
hadoop-daemon.sh start datanode
6、在两个 namenode 节点(hp1、hp2)分别启动zkfc服务
hadoop-daemon.sh start zkfc
7、启动 yarn 服务
start-yarn.sh