Hadoop2 + Centos7 完全分布式配置
集群规划
内存有限,只搞3台机器
主机名 | IP | 角色 | |
---|---|---|---|
master | 172.16.76.140 | zk | |
slave1 | 172.16.76.141 | zk | |
slave2 | 172.16.76.141 | zk |
ssh免密登录
本地DNS设置
在每台机器的 /etc/hosts
中写入每台机器的别名和ip地址
172.16.76.140 master
172.16.76.141 slave1
172.16.76.142 slave2
生成公钥和私钥
- master机器上免密
在master
机器上,使用命令生成
ssh-keygen -t rsa
输入后,连续3次回车
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
af:0f:a9:87:43:8d:02:e4:c4:5b:aa:68:57:e8:3f:7d root@master
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| + . |
| + +. |
| =. . |
|..... oS |
|o. o. o .o |
|. . .o..o . |
| ooo.E |
| ooo.. |
+-----------------+
此时会在用户的根目录下生成.ssh的一个隐藏文件夹。进入到文件夹中有两个文件
-rw-------. 1 root root 1679 Nov 5 15:32 id_rsa
-rw-r--r--. 1 root root 393 Nov 5 15:32 id_rsa.pub
配置master节点可以直接ssh访问
进入master节点的.ssh目录
cat id_rsa.pub >> authorized_keys
此时,直接使ssh master
就可以免密登录了
-
其他节点免密
-
在其他节点上使用
ssh-keygen -t rsa
生成公钥和私钥, -
将节点上 的
id_rsa.pub
文件的内容拷贝到master
的.ssh文件的authorized_keys
文件中 -
将master节点的.ssh文件的
authorized_keys
文件分发到slave1
和slave2上
scp authorized_keys root@slave2:/root/.ssh/
-
从不同的节点ssh到其他节点试一下,第一次可能需要输入yes
ECDSA key fingerprint is 94:d0:43:a9:48:f2:76:26:88:7c:2c:29:ec:52:ca:c4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave2,172.16.76.142' (ECDSA) hto the list of known hosts.
Last login: Mon Nov 5 15:50:12 2018 from slave1
Java配置
下载
这里用的JDK8(java-8u191),下载linux版本的压缩包(.tar.gz) 下载地址
配置
-
在根目录下创建了java目录,将
jdk-8u191-linux-x64.tar.gz
解压到java目录 -
配置环境变量
/etc/profile
,加入export JAVA_HOME=/root/apps/java/jdk1.8.0_191 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
修改完成后记得用命令更新一下
source /etc/profile
-
输入命令测试一下
java javac -version java -version
每台机器都装一下,可以直接scp数据过去
scp -r apps/java root@slave1:/root/apps/
scp -r apps/java root@slave2:/root/apps/
zookeeper安装
zookeeper的配置需要使用奇数个数的节点,因此我们给3台机器都配置上zookeeper.
下载
下载zookeeper稳定版(这里用的zookeeper-3.4.12) 下载地址
配置
-
解压包到
/root/apps
下,并命名为zookeeper
. -
修改环境变量
export ZOOKEEPER_HOME=/root/apps/zookeeper-3.4.5 export PATH=$PATH:$ZOOKEEPER_HOME/bin
修改完成后记得用命令更新一下
source /etc/profile
-
配置zookeeper
-
创建目录
/root/data/zookeeper/data /root/data/zookeeper/logs
-
修改zookeeper目录下的
conf/zoo.cfg
.如没有,可以使用命令cp zoo_sample.cfg zoo.cfg
-
修改
zoo.cfg
中的dataDir
为上面创建的第一个目录 -
修改
zoo.cfg
中的dataLogDir
为上面创建的第二个目录 -
添加为zookeeper的服务地址信息
server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888
-
在
dataDir
中编译一个文件myid(如果没有创建一个,里面的值为1) -
分发zookeeper到其他机器。
-
修改每个机器上的
-
-
关闭防火墙
firewall-cmd --state # 查看防火墙状态 systemctl stop firewalld.service # 停止firewall systemctl disable firewalld.service # 禁止firewall开机启动
启动和状态检查
在每一台安装了zookeeper的机器上启动zookeeper.
zkServer.sh start
jps
查看启动的状态
[root@master data]# jps
3082 Jps
3021 QuorumPeerMain
zkServer.sh status
查看状态
ZooKeeper JMX enabled by default
Using config: /root/apps/zookeeper/bin/../conf/zoo.cfg
Mode: leader
正确的话,应该是1个leader
,2个follower
.
zkServer.sh stop
停止zookeeper服务
hadoop安装
此处不配置HA(本地环境机器资源有限,玩不了那么多)
下载
下载完成后解压到一个目录
配置
- 配置环境变量
export HADOOP_HOME=/root/apps/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 修改 hadoop-env.sh
export JAVA_HOME=/root/apps/java/jdk1.8.0_191
- 修改yarn-env.sh文件
export JAVA_HOME=/root/apps/java/jdk1.8.0_191
- 修改slaves文件
加入从节点的主机名
slave1
slave2
- 修改 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
- 修改文件 hdfs-site.xml的配置
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 文件 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- 文件 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 将配置发送到其他机器
scp
命令将配置发送到slave机器上的相同目录下
- 格式化数据
首次启动需要先在 Master
节点执行 NameNode
的格式化:
hdfs namenode -format
至此,hadoop不含HA和ZKFC的安装就完毕了
启动安装的hadoop集群
在master节点上使用命令启动hdfs
和yarn
start-dfs.sh
start-yarn.sh
使用jps命令可以看到相关进行信息
master(namenode)节点上
2977 ResourceManager
3842 Jps
3305 QuorumPeerMain
2603 NameNode
2815 SecondaryNameNode
slave(datanode)节点上
2305 DataNode
2434 NodeManager
2596 QuorumPeerMain
2687 Jps
hbase安装
下载
下载完成后解压到一个/root/app
目录下
配置
-
配置环境变量
export HBASE_HOME=/root/apps/hbase export PATH=$PATH:$HBASE_HOME/bin
-
配置
hdfs-site.xml
说实话不知道这步要不要配置,将hadoop配置文件里面的
hdfs-site.xml
文件拷贝到此处即可 -
配置
hbase-env.sh
找到如下变量进行配置
# 导出环境变量JAVA_HOME export JAVA_HOME=/root/apps/java/jdk1.8.0_191 # 指定HBASE_CLASSPATH 为 HADDOP_CONF_DIR export HBASE_CLASSPATH=/root/apps/hadoop/etc/hadoop # 指定zookeeper为自定义的,而非hbase自带的 export HBASE_MANAGES_ZK=false
-
配置
hbase-site.xml
<configuration> <property> <name>hbase.cluster.distributed</name> <!-- 是否分布式部署 --> <value>true</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://master:8020/hbase</value> <description>HBase数据存储目录</description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description>指定HBase运行的模式:false:单机/伪分布;true:完全分布</description> </property> <property> <name>hbase.zookeeper.quorum</name> <value>master,slave1,slave2</value> <description>指定ZooKeeper集群</description> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> <description>Property from ZooKeeper's config zoo.cfg. The port at which the clients will connect.</description> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/root/data/zookeeper/data</value> <description>Property from ZooKeeper's config zoo.cfg.The directory where the snapshot is stored. </description> </property> </configuration>
-
分发到其他机器
-
启动hbase
# 在哪台机器上启动哪台机器就是Hmaster start-hbase.sh
hadoop相关组件的启停
启动顺序
-
Hadoop及hbase集群启动顺序
zookeepeer->hadoop->hbase
-
Hadoop及hbase集群关闭顺序
hbase->hadoop->zookeepeer
启停ZK
-
启动和停止ZK
/home/zookeeper-3.4.6/bin/zkServer.sh start | stop
启动hadoop集群
-
启动及停止Hadoop方式一
-
启停yarn及hdfs(一起启动)
/data/hadoop/sbin/start-all.sh | stop-all.sh
-
启停historyserver进程
/data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver
-
-
启动及停止Hadoop方式二
-
启停hdfs集群
/data/hadoop/sbin/start-dfs.sh | stop-dfs.sh
-
启停yarn集群
/data/hadoop/sbin/start-yarn.sh | stop-yarn.sh
-
启停historyserver进程
/data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver
-
启动及停止Hadoop方式三
-
启停hdfs单个进程
/data/hadoop/sbin/hadoop-daemon.sh start | stop namenode /data/hadoop/sbin/hadoop-daemon.sh start | stop datanode /data/hadoop/sbin/hadoop-daemon.sh start | stop journalnode /data/hadoop/sbin/hadoop-daemon.sh start | stop zkfc
-
启停yarn单个进程
/data/hadoop/sbin/yarn-daemon.sh start | stop resourcemanager /data/hadoop/sbin/yarn-daemons.sh start | stop nodemanager
-
启停historyserver进程
/data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver
启停Hbase集群
-
启动及停止Hbase方式一
-
启停HBase集群
/data/hbase/bin/start-hbase.sh | stop-hbase.sh
-
-
启动及停止Hbase方式二
-
启停单个Hbase进程
/data/hbase/bin/hbase-daemon.sh start | stop master /data/hbase/bin/hbase-daemon.sh start | stop regionserver
-
hive安装
下载
下载完成后解压到/root/apps/hive
目录
配置环境变量
#hive安装配置
export HIVE_HOME=/root/apps/hive
export PATH=$PATH:$HIVE_HOME/bin
hdfs上创建相关目录和设置权限
hadoop fs -mkdir /tmp
hadoop fs -mkdir /hive
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /hive
安装并配置mysql服务
-
安装
参考这篇文章centos7下安装mysql5.7
-
配置
-
创建hive数据库
create database hive;
-
创建hive用户并赋予权限
create user "hive" identified by "up213wifi"; GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'up213wifi' WITH GRANT OPTION; flush privileges;
-
配置hive
hive是hadoop的一个客户端,不需要所有的机器上都安装hive,这点和hadoop和hbase不一样
-
将
hive-default.xml.template
文件拷贝成hive-site.xml
-
配置
hive-site.xml
<configuration> <!-- 设置 hive仓库的HDFS上的位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/hive</value> <description>location of default database for the warehouse</description> </property> <!-- 设置元数据存放的数据库地址、名字 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://slave3:3306/hive?useSSL=false</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/dbName?ssl=true for postgres database. </description> </property> <!--Driver class名字--> <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>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>Username to use against metastore database</description> </property> <!--连接使用的密码--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>up213wifi</value> <description>password to use against metastore database</description> </property> <!--io相关的临时文件存放位置 --> <property> <name>hive.exec.local.scratchdir</name> <value>/root/data/hive/iotemp</value> <description>Local scratch space for Hive jobs</description> </property> <!--资源临时文件存放位置--> <property> <name>hive.downloaded.resources.dir</name> <value>/root/data/hive/iotemp</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> </configuration>
-
修改
hive-env.sh
拷贝一份
hive-env.sh
cp hive-env.sh.template hive-env.sh
修改数据
HADOOP_HOME=/root/apps/hadoop export HIVE_CONF_DIR=/root/apps/hive/conf
-
拷贝mysql的jar包
拷贝mysql的jar包到
${HIVE_HOME}/lib
下 -
修改log4j文件
cp hive-log4j2.properties.template hive-log4j2.properties cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
使用schematool初始化
schematool -dbType mysql -initSchema
会显示一段文字
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/apps/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/root/apps/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL: jdbc:mysql://slave3:3306/hive?useSSL=false
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: hive
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed
表示初始化成功
初始化完成后进入到mysql数据库中(使用hive的数据库)
use hive;
show tables;
可以看到如下的数据表已经给被创立了
+---------------------------+
| Tables_in_hive |
+---------------------------+
| AUX_TABLE |
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| COMPACTION_QUEUE |
| COMPLETED_COMPACTIONS |
| COMPLETED_TXN_COMPONENTS |
| DATABASE_PARAMS |
| DBS |
| DB_PRIVS |
| DELEGATION_TOKENS |
| FUNCS |
| FUNC_RU |
| GLOBAL_PRIVS |
| HIVE_LOCKS |
| IDXS |
| INDEX_PARAMS |
| KEY_CONSTRAINTS |
| MASTER_KEYS |
| NEXT_COMPACTION_QUEUE_ID |
| NEXT_LOCK_ID |
| NEXT_TXN_ID |
| NOTIFICATION_LOG |
| NOTIFICATION_SEQUENCE |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_EVENTS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_PRIVS |
| PART_COL_STATS |
| PART_PRIVS |
| ROLES |
| ROLE_MAP |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| TBL_COL_PRIVS |
| TBL_PRIVS |
| TXNS |
| TXN_COMPONENTS |
| TYPES |
| TYPE_FIELDS |
| VERSION |
| WRITE_SET |
+---------------------------+
57 rows in set (0.00 sec)
启动hive
HiveServer2是HiveServer改进版本,它提供给新的ThriftAPI来处理JDBC或者ODBC客户端,进行Kerberos身份验证,多个客户端并发,HS2还提供了新的CLI:BeeLine,是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作为Hive JDBC Client 端访问HievServer2,启动一个beeline就是维护了一个session.
-
服务启动方式
hiveserver2
-
客户端启动方式
hive
补充说明
hive作为一个客户端,你可以在任何的机器上配置好以后安装,这样,只要有hive的机器上就可以使用hive来进行操作了。