Hadoop生态系统安装

# Hadoop 集群环境安装手册

[TOC]

## 一、JDK安装

### 1.1 JDK1.8下载

​到oracle官网下载[jdk-8u101-linux-x64.tar.gz](http://download.oracle.com/otn-pub/java/jdk/8u101-b14/jdk-8u101-linux-x64.tar.gz?AuthParam=1483251511_04673c3489fc71bc4768a7cc206b3ae4)

​先查找并卸载自带openJDK

```shell

rpm -qa |grep openjdk

yum -y remove *openjdk*

```

​解压[jdk-8u101-linux-x64.tar.gz](http://download.oracle.com/otn-pub/java/jdk/8u101-b14/jdk-8u101-linux-x64.tar.gz?AuthParam=1483251511_04673c3489fc71bc4768a7cc206b3ae4)到安装目录,如果没有特别说明,全文中安装目录都是指/data0/soft/

```shell

remove jdk-8u101-linux-x64.tar.gz /data0/soft/

cd /data0/soft

tar zxvf jdk-8u101-linux-x64.tar.gz

mv jdk-8u101-linux-x64.tar.gz java

```

​配置JAVA_HOME

```

echo '## java configuration ' >> /etc/profile

echo 'export JAVA_HOME=/data0/soft/java' >> /etc/profile

echo 'export PATH=.:$JAVA_HOME/bin:$PATH' >> /etc/profile

source /etc/profile

```

​验证是否安装成功

```shell

java -version

```

## 二、Zookeeper安装

### 2.1 Zookeeper下载准备

​去Zookeeper官网或者用wget下载安装包[zookeeper-3.4.9.tar.gz](http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz)

### 2.2 Zookeeper安装配置

​把[zookeeper-3.4.9.tar.gz](http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz)移动到安装目录并解压

```shell

mv zookeeper-3.4.9.tar.gz /data0/soft/

cd /data0/soft

tar zxvf zookeeper-3.4.9.tar.gz 

mv zookeeper-3.4.9 zookeeper

```

​编辑并保存zoo.cfg,配置文件如下

```shell

vi /data0/soft/zookeeper/conf/zoo.cfg

#重新写入以下配置

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data0/soft/zookeeper

clientPort=2181

server.1=dmp1:2888:3999

server.2=dmp2:2888:3999

server.3=dmp3:2888:3999

```

​编辑hosts文件,对应server.*的主机名

```shell

vi /etc/hosts

#写入集群主机名映射关系

10.20.26.30    dmp1

10.20.26.31    dmp2

10.20.26.32    dmp3

```

​在dataDir下新增文件myid,填写值为server.*对应的编号

```shell

echo '1'>/data0/soft/zookeeper/myid

```

​添加Zookeeper环境变量

```shell

echo '## zk configuration ' >> /etc/profile

echo 'export ZOOKEEPER_HOME=/data0/soft/zookeeper' >> /etc/profile

echo 'export PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile

source /etc/profile

```

​启动Zookeeper并查看状态,可以看到节点是leader还是follower

```shell

zkServer.sh start

zkServer.sh status

```

## 三、Hadoop安装

### 3.1 Hadoop下载准备

​这里用下载的hadoop-2.6.0-cdh5.5.0.tar.gz(!注:其中的配置文件是已经配置过的,只需要改成对应集群的名称及目录路径即可)

​如果只有一块磁盘,该文档中的data0、data1都指data目录

### 3.2Hadoop集群规划###

| hostname | ip   | 安装组件                                     |

| -------- | ---- | ---------------------------------------- |

| dmp1     |      | Namenode/ResourceManager/journalNode/zkfc/jobhistoryServer  /timeLineServer/proxyServer/metastore/hiveSerer2 |

| dmp2     |      | namenode/ResourceManager/journalNode/zkfc |

| dmp3     |      | DataNode/NodeManager/journalNode         |

| dmp4     |      | DataNode/NodeManager                     |

| dmp5     |      | DataNode/NodeManager                     |

| dmp6     |      | DataNode/NodeManager                     |

| ...      |      | DataNode/NodeManager                     |

### 3.2系统配置

```shell

#### 3.2.1修改hosts文件####

dmp1xx.xx.xx.xx

dmp2xx.xx.xx.xx

...

```

​修改所有节点的hosts文件,添加ip和集群列表中对应hostname

#### 3.2.2修改hostname####

​修改所有节点的/etc/sysconfig/network文件,修改对应的hostname,重启生效

#### 3.2.3关闭防火墙####

~~~shell

service iptables off

//如果局域网内端口不设防火墙则不需要关闭

~~~

#### 3.2.4修改linux参数####

​修改所有节点文件:/etc/selinux/config,修改SELINUX=disabled

​修改所有节点文件打开数量:/etc/security/limits.conf,增加一行内容 : * - nofile 1024000

​修改所有节点最大进程数:/etc/security/limits.d/90-nproc.conf,增加一行:* - nproc 262144

​修改所有节点内存配置:/etc/sysctl.conf,改为:

~~~properties

vm.overcommit_memory=1

vm.swappiness=0

#*# 1

net.core.somaxconn=32768

~~~

​关闭THP:

~~~shell

#*# 2

echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

~~~

  #### 3.2.5新增用户 ####

​新增用户hadoop,并将hadoop添加到hadoop组

~~~shell

useradd hadoop

useradd hadoop

usermod -a -G hadoop hadoop

passwd hadoop Paic1234

~~~

​将每个节点的数据磁盘路径权限设为775,这里假设每个磁盘挂载目录为data0,data1..data*

~~~shell

chmod -R 775 /data0

chmod -R 775 /data1

~~~

#### 3.2.6添加节点间hadoop用户免密登陆####

在dmp1上用hadoop用户执行

```shell

ssh-keygen -t rsa

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

//在每一个从节点执行 ssh-copy-id -i dmp1,将公钥发送到主节点

//将公钥文件发送到各节点

for i in {2..6};do scp ~/.ssh/authorized_keys hadoop@dmp$i:~/.ssh/;done;

//配置known_hosts验证关闭

 vi /etc/ssh/ssh_config

 StrictHostKeyChecking no

```

#### 3.2.7解压安装hadoop####

​将安装包hadoop-2.6.0-cdh5.5.0.tar.gz解压到/data0/soft,**注意**,如果安装包根目录native目录为空则需要去下载编译native文件。

​设置环境变量到~/.bashrc

~~~shell

export HADOOP_HOME=/data0/soft/hadoop

export HIVE_HOME=/data0/soft/hive

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin

~~~

#### 3.2.8创建工作目录

​为每个节点创建用户工作目录:/data0/hadoop/

​创建hdfs工作目录:/data0/hadoop/dfs、/data0/hadoop/dfs/logs、/data0/hadoop/dfs/pid

​创建hive工作目录:/data0/hadoop/hive、/data0/hadoop/hive/logs

### 3.3Hadoop配置

#### 3.3.1修改core-site.xml

| name                       | value                         | 描述                                       |

| -------------------------- | ----------------------------- | ---------------------------------------- |

| fs.defaultFS               | hdfs://dmp                    | 这里的值指的是默认的HDFS路径。                        |

| hadoop.tmp.dir             | /data0/hadoop/tmp             | 这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录 |

| ha.zookeeper.quorum        | dmp1:2181,dmp2:2181,dmp3:2181 | 这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点 |

| fs.trash.interval          | 2880                          | 设置回收站保存时间                                |

| hadoop.proxyuser.dmp.hosts | *                             | 指定有访问权限的地址                               |

| hadoop.proxyuser.dmp.group | *                             | 指定有访问权限的用户组                              |

#### 3.3.2修改hdfs-site.xml

| name                                   | value                                    | 描述                                       |

| -------------------------------------- | ---------------------------------------- | ---------------------------------------- |

| dfs.replication                        | 3                                        | 指定DataNode存储block的副本数量                   |

| dfs.namenode.name.dir                  | file:///data0/hdfs/name                  | 指定namenode元数据信息存储位置                      |

| dfs.datanode.data.dir                  | file:///data0/hdfs/data,file:///data1/hdfs/data,file:///data2/hdfs/data,.. | 指定datanode元数据信息存储位置,  设置成所有的磁盘;  测试环境中如果是只有一个盘就只写一个盘 |

| dfs.nameservices                       | dmp                                      | Hdfs的集群名称,自己定                            |

| dfs.ha.namenodes.dmp                   | dmp1,dmp2                                | 指定NameService是dmp时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可 |

| dfs.namenode.rpc-address.dmp.dmp1      | dmp1:9000                                | 指定rm1的RPC地址                              |

| dfs.namenode.http-address              | 0.0.0.0:50070                            | 指定http地址                                 |

| dfs.namenode.rpc-address.dmp.dmp2      | dmp2:9000                                | 指定rm2的RPC地址                              |

| dfs.journalnode.http-address           | 0.0.0.0:8480                             | 指定journalnode http                       |

| dfs.namenode.shared.edits.dir          | qjournal://dmp1;dmp2;dmp3/dmp            | 指定dmp的两个NameNode共享edits文件目录时,使用的JournalNode集群信息 |

| dfs.ha.automatic-failover.enabled      | true                                     | 即当NameNode出故障时,是否自动切换到另一台NameNode        |

| dfs.client.failover.proxy.provider.dmp | org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider | 指定NameNode出故障时,哪个实现类负责执行故障切换             |

| dfs.journalnode.edits.dir              | /data0/hdfs/journal                      | 指定JournalNode集群在对NameNode的目录进行共享时,自己存储数据的磁盘路径 |

| dfs.ha.fencing.methods                 | sshfence                                 | (说明:如果节点的22端口改了,请标明改成什么端口, hadoop2是用户名, 36102是节点端口<value>sshfence(hadoop2:36102) |

| dfs.ha.fencing.ssh.private-key-files   | /home/hadoop/.ssh/id_rsa                 | 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置          |

| dfs.permissions                        | false                                    | 是否开启hdfs访问权限验证                           |

#### 3.3.3修改文件yarn-site.xml

| key                                      | value                                    | desc                                     |

| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |

| yarn.resourcemanager.ha.enabled          | true                                     | 打开resourcemanager ha模式                   |

| yarn.resourcemanager.cluster-id          | yarn-ha-cluster                          | 设置resourcemanager ha的集群名称,进程启动后这个名称可以在zookeeper中查看 |

| yarn.resourcemanager.ha.rm-ids           | rm1,rm2                                  | 设置resourcemanager的id,可以与主机同名,  本例子与主机同名  |

| yarn.resourcemanager.hostname.rm1        | dmp1                                     | 指定rm1对应哪一台主机                             |

| yarn.resourcemanager.hostname.rm2        | dmp2                                     | 指定rm2对应哪一台主机                             |

| yarn.resourcemanager.zk-address          | dmp1:2181,dmp2:2181,dmp3:2181            | 设置zkurl                                  |

| yarn.nodemanager.aux-services            | mapreduce_shuffle                        | 用什么方式进行数据传递                              |

| yarn.log-aggregation-enable              | true                                     |                                          |

| yarn.log.server.url                      | http://dmp1:19888/jobhistory/logs/       | 设置jobhistory的地址。 在这个地址有                  |

| yarn.resourcemanager.scheduler.class     | org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler | 设置调  度器,不设就用默认。默认也可以                     |

| yarn.resourcemanager.scheduler.monitor.enable | true                                     | 支持资源抢占                                   |

| yarn.nodemanager.local-dirs              | file:///data0/dfs/nm-local-dir,file:///data1/dfs/nm-local-dir,.. |                                          |

| yarn.nodemanager.resource.memory-mb      | 20480                                    | nodeManager可分配的内存大小,设置成比总内存略小。120g的机器设置成110g |

| yarn.nodemanager.resource.cpu-vcores     | 32                                       | 设置nodemanager节点内存大小,CPU个数                |

| yarn.timeline-service.enabled            | true                                     | 打开timeline服务                             |

| yarn.log-aggregation.retain-seconds      | 86400                                    | 日志保留时间,默认不删除                             |

#### 3.3.4修改mapred-site.xml

| key                                   | value      | desc                   |

| ------------------------------------- | ---------- | ---------------------- |

| mapreduce.framework.name              | yarn       | 打开resourcemanager ha模式 |

| mapreduce.jobhistory.address          | dmp1:10020 | 设置jobhistory地址         |

| mapreduce.jobhistory.webapp.address   | dmp1:19888 | 设置ui  jobhistory地址     |

| mapreduce.reduce.input.buffer.percent | 0.8        | mr buffer占最大内存比率       |

#### 3.3.5修改slaves文件

​将datanode的hostname按行写入slaves文件

#### 3.3.6修改yarn-env.sh文件

​YARN_LOG_DIR=/data0/hadoop/dfs/logs

​YARN_PID_DIR=/data0/hadoop/dfs/pid

​export JAVA_HOME=/data0/soft/java/jdk1.8.0_101

#### 3.3.7修改hadoop-env.sh 文件

​export HADOOP_LOG_DIR=/data0/hadoop/dfs/log

​export HADOOP_PID_DIR=/data0/hadoop/dfs/pid

​export JAVA_HOME=/data0/soft/java/jdk1.8.0_101

#### 3.3.8修改mapred-env.sh

​export HADOOP_LOG_DIR=/data0/hadoop/dfs/log

​export HADOOP_PID_DIR=/data0/hadoop/dfs/pid

​export JAVA_HOME=/data0/soft/java/jdk1.8.0_101

#### 3.3.9hadoop安装目录分发

​将配置好的hadoop目录用scp分发到所有节点上

​每个节点配置相同

### 3.4启动Hadoop集群

#### 3.4.1启动journalNode

​在dmp1、dmp2上执行:hadoop-daemon.sh start journalnode

#### 3.4.2格式化zk

​在dmp1上执行:hdfs  zkfc  -formatZK

#### 3.4.3格式化namenode

​在dmp1上执行

​hdfs namenode -format

​hadoop-daemon.sh start namenode

​在dmp2上执行

​hdfs namenode -bootstrapStandby

​hadoop-daemon.sh start namenode

#### 3.4.4启动hdfs

​在dmp1上执行:start-dfs.sh

​在dmp1上执行:start-yarn.sh

#### 3.4.5启动其他服务

​在dmp1上执行:

​mr-jobhistory-daemon.sh start historyserver

​yarn-daemon.sh start proxyserver

​yarn-daemon.sh start timelineserver

#### 3.4.6Hadoop启动与停止

​初始化完以后的常规启动和停止

​启动,在dmp1上执行:

```shell

start-dfs.sh

start-yarn.sh

```

​停止,在dmp1上执行:

```shell

stop-dfs.sh

stop-yarn.sh

```

访问

[http://dmp1:50070](http://dmp1:50070)

[http://dmp2:50070](http://dmp2:50070)

可以查看hadoop集群状态,其中一个为active,一个为standby

##四、Hive安装

### 4.1Mysql安装

​这里hive使用mysql作元数据存储,mysql安装过程略。

​安装完以后创建hive元数据的schema

~~~mysql

create database hive default charset latin1;

~~~

### 4.2Hive下载准备

​这里使用hive2.1.1版本进行安装。(!注:其中的配置文件是已经配置过的,已包含mysql驱动包,只需要改成对应集群的名称及目录路径即可)

### 4.3Hive配置

#### 4.3.1解压Hive

​将hive2.1.1.tar.gz解压到/data0/soft

#### 4.3.2修改环境变量

​在hadoop安装过程中已配置

#### 4.3.3修改hive-size.xml

​cp hive-default.xml.template hive-site.xml

​修改javax.jdo.option.ConnectionURL的值为mysql连接url

​修改javax.jdo.option.ConnectionDriverName为mysql用户名

​修改javax.jdo.option.ConnectionPassword的值为mysql密码

​修改hive.metastore.schema.verification的值为false

#### 4.3.4修改日志文件

​cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

​cp hive-log4j2.properties.template  hive-log4j2.properties

#### 4.3.5初始化元数据

​登陆mysql,执行:

```mysql

create database hive default charset latin1;//database名称与url一致

```

​在hive的bin下面执行:./schematool -initSchema -dbType mysql 

#### 4.3.6添加metastore启动脚本

​vi start-metastore.sh

~~~shell

#/bin/sh

if [ -z "${HIVE_HOME}" ]; then

  export HIVE_HOME="$(cd "`dirname "$0"`"/..; pwd)"

fi

echo $HIVE_HOME

nohup $HIVE_HOME/bin/hive --service metastore  > $HIVE_HOME/logs/metastore.log 2>&1  &

echo $$

~~~

​chmod u+x start-metastore.sh

​./start-metastore.sh

#### 4.3.7添加hiveserver2启动脚本

​vi start-hiveserver2.sh

~~~shell

#/bin/sh

if [ -z "${HIVE_HOME}" ]; then

  export HIVE_HOME="$(cd "`dirname "$0"`"/..; pwd)"

fi

echo $HIVE_HOME

nohup $HIVE_HOME/bin/hive --service hiveserver2  > $HIVE_HOME/logs/hiveserver2.log 2>&1  &

echo $$

~~~

​chmod u+x start-hiveserver2.sh

​./start-hiveserver2.sh

### 4.4启动hive客户端

​执行命令:hive

​即可以操作hive sql

## 5.Azkaban安装

### 5.1下载准备

​下载并编译Azkaban3.10.0,这里直接使用已编译和配置的安装包Azkaban3.10.0.tar.gz

### 5.2安装配置

​将Azkaban3.10.0.tar.gz解压到/data0/soft目录下

​进入/data0/soft/azkaban/plugins/jobtypes/hive/

​将plugin.properties和private.properties中hive.aux.jars.path修改为hive lib目录

```properties

hive.aux.jars.path=/data0/soft/hive2.1.1/lib

```

​进入/data0/soft/azkaban/plugins/jobtypes/spark/

​将private.properties中jobtype.classpath注释掉

​进入/data0/soft/azkaban/plugins/jobtypes,将common.properties中相关应用的根目录修改为实际安装目录

~~~properties

hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0

hive.home=/data0/soft/hive2.1.1

pig.home=/dpata0/soft/azkaban/plugins/jobtype/pig

//spark.home=不存在的组件不用配置

azkaban.home=/data0/soft/azkaban

~~~

​修改private.properties,参照上面修改应用对应目录

```properties

hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0

hive.home=/data0/soft/hive2.1.1

jobtype.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*:${hive.home}/conf:${hive.home}/lib/*

```

​修改commonprivate.properties,按上面修改应用对应根目录,然后修改类路径

~~~properties

hadoop.home=/data0/soft/hadoop-2.6.0-cdh5.5.0

hive.home=/data0/soft/hive2.1.1

pig.home=/dpata0/soft/azkaban/plugins/jobtype/pig

//spark.home=不存在的组件不用配置

azkaban.home=/data0/soft/azkaban

jobtype.global.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*:${hive.home}/conf:${hive.home}/lib/*

hadoop.classpath=${hadoop.home}/etc/hadoop:${hadoop.home}/share/hadoop/common/*:${hadoop.home}/share/hadoop/common/lib/*:${hadoop.home}/share/hadoop/hdfs/*:${hadoop.home}/share/hadoop/hdfs/lib/*:${hadoop.home}/share/hadoop/yarn/*:${hadoop.home}/share/hadoop/yarn/lib/*:${hadoop.home}/share/hadoop/mapreduce/*:${hadoop.home}/share/hadoop/mapreduce/lib/*

~~~

​修改/data0/soft/azkaban/conf/azkaban.properties

~~~properties

default.timezone.id=Asia/Shanghai

database.type=mysql

mysql.port=3306

mysql.host=10.1.2.xxx

mysql.database=azkaban

mysql.user=user

mysql.password=pass

mysql.numconnections=50

azkaban.webserver.url=http://10.1.2.xxx:8081

azkaban.name=DMP

azkaban.label=DMP Scheduling Center

~~~

​修改/data0/soft/azkaban/bin/azkaban-solo-start.sh,加入java环境变量

```

export PATH=/usr/java/jdk1.8.0_101/bin:$PATH

```

​拷贝commons-configuration-1.6.jar和hadoop-common-2.6.0-cdh5.5.0.jar两个jar包到/data0/soft/azkaban/lib目录下(这里已经打包在里边了)

### 5.3启动和停止Azkaban

#### 5.3.1启动Azkaban

​首先在mysql中创建azkaban库

```mysql

create database azkaban;

```

​在根目录下启动Azkaban(必须),bin/azkaban-solo-start.sh

#### 5.3.2停止Azkaban

​在根目录下关闭Azkaban,bin/azkaban-solo-shutdown.sh

## 6.Scala安装

### 6.1 Scala下载

​到scala官网下载spark所需版本的安装包,scala-2.11.8.tgz。

### 6.2配置

​将scala解压到/user

​在hadoop用户下添加Scala环境变量

```properties

export SCALA_HOME=/usr/scala

export HADOOP_HOME=/data0/soft/hadoop-2.6.0-cdh5.5.0

export HIVE_HOME=/data0/soft/hive2.1.1

export ZOOKEEPER_HOME=/data0/soft/zookeeper-3.4.5-cdh5.5.0

PATH=$SCALA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

```

​配置生效后,输入scala,可以显示scala的版本信息,则表示配置成功。

## 7. Spark安装

### 7.1 Spark下载

​对应scala2.11.8的版本,下载spark-2.1.0-bin-hadoop2.6.tgz

### 7.2安装配置

​将安装包解压到/data0/soft/下。

​hadoop用户配置环境变量到bashrc

```properties

export SPARK_HOME=/data0/soft/spark-2.1.0-bin-hadoop2.6

export SCALA_HOME=/usr/scala

export HADOOP_HOME=/data0/soft/hadoop-2.6.0-cdh5.5.0

export HIVE_HOME=/data0/soft/hive2.1.1

export ZOOKEEPER_HOME=/data0/soft/zookeeper-3.4.5-cdh5.5.0

PATH=$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

```

​修改根目录conf下spark-env.sh 添加

~~~properties

export SPARK_MASTER_IP=dmp1

export SPARK_WORKER_MEMORY=10g

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

~~~

​修改slaves文件,添加节点名称

~~~properties

dmp2

dmp3

dmp4

dmp5

dmp6

~~~

​将hive conf下面的hive-site.xml文件拷贝到spark conf下面(完成sparksql和hive元数据共享)

### 7.3启动并验证

​进入spark sbin目录(防止与hadoop命令冲突),启动start-all.sh

~~~shell

./start-all.sh

~~~

​然后使用spark-shell进入scala操作界面来做spark操作。

## 8. Hbase 安装

### 8.1 Hbase下载

​到官网下载Hbase1.2.6版本

### 8.2 安装配置

​将Hbase1.2.6安装包解压到/data0/soft目录下

​配置环境变量

~~~properties

export SPARK_HOME=/data0/soft/spark-2.1.0-bin-hadoop2.6

export SCALA_HOME=/usr/scala

export HADOOP_HOME=/data0/soft/hadoop-2.6.0-cdh5.5.0

export HIVE_HOME=/data0/soft/hive2.1.1

export HBASE_HOME=/data0/soft/hbase-1.2.6

export ZOOKEEPER_HOME=/data0/soft/zookeeper-3.4.5-cdh5.5.0

PATH=$HBASE_HOME:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

~~~

​修改所有hbase根目录下conf/hbase-site.xml

~~~xml

<configuration>

        <property>

                <name>hbase.rootdir</name>

                <value>hdfs://dmp/hbase</value>

        </property>

        <property>

                <name>hbase.cluster.distributed</name>

                <value>true</value>

        </property>

        <property>

                <name>hbase.zookeeper.quorum</name>

                <value>dmp4:2182,dmp5:2182,dmp6:2182</value>

        </property>

        <property>

                <name>hbase.tmp.dir</name>

                <value>/data0/dfs/hbase/tmp/</value>

        </property>

        <property>

                <name>hbase.local.dir</name>

                <value>/data0/dfs/hbase/local/</value>

        </property>

        <property>

                <name>hbase.master</name>

                <value>30.16.94.72:60000/</value>

        </property>

        <property>

                <name>hbase.zookeeper.property.clientPort</name>

                <value>2182</value>

        </property>

        <property>

                <name>dfs.replication</name>

                <value>3</value>

        </property>

        <property>

                <name>dfs.client.socket-timeout</name>

                <value>300000</value>

        </property>

        <!--zookeeper存储数据位置-->

        <property>

                <name>hbase.zookeeper.property.dataDir</name>

                <value>/data0/dfs/zookeeper</value>

                </property>

        <property>

                <name>hbase.zookeeper.property.tickTime</name>

                <value>6000</value>

        </property>

        <property>

                <name>hbase.client.write.buffer</name>

                <value>8388608</value>

        </property>

        <property>

                <name>hbase.thrift.support.proxyuser</name>

                <value>true</value>

        </property>

        <property>

                <name>hbase.regionserver.thrift.http</name>

                <value>true</value>

        </property>

        <property>

                <name>hbase.regionserver.thrift.framed</name>

                <value>true</value>

        </property>

        <property>

                <name>hbase.regionserver.thrift.type</name>

                <value>TThreadPoolServer</value>

        </property>

        <!--这里设置Master并发最大线程数-->

        <property>

                <name>hbase.regionserver.handler.count</name>

                <value>300</value>

        </property>

        <property>

                <name>hbase.table.sanity.checks</name>

                <value>false</value>

        </property>

        <!--ZooKeeper 会话超时.HBase把这个值传递改zk集群,向他推荐一个会话的最大超时时间-->

        <property>

                <!--every 30s,the master will check regionser is working -->

                <name>zookeeper.session.timeout</name>

                <value>1200000</value>

        </property>

        <property>

        <name>hbase.hregion.max.filesize</name>

                <value>32212254720</value>

        </property>

        <property>

                <name>hbase.hstore.blockingStoreFiles</name>

                <value>50</value>

        </property>

</configuration>

~~~

​修改master hbase-evn.sh

~~~sh

export JAVA_HOME=/data0/soft/java

export HBASE_CLASSPATH=/data0/soft/hadoop-2.6.0-cdh5.5.0/etc/hadoop

export HBASE_HEAPSIZE=4096

export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/data0/dfs/hbase/logs/hbase-gc.log -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60"

export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/dfs/hbase/logs/server-gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M"

export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

export HBASE_MASTER_OPTS="-Xmx3g $HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101"

export HBASE_REGIONSERVER_OPTS="-Xmx4g -XX:+ParallelRefProcEnabled -XX:-ResizePLAB -XX:ParallelGCThreads=15 $HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"

export HBASE_LOG_DIR=/data0/dfs/hbase/logs

export HBASE_MANAGES_ZK=true

~~~

​修改regionserver hbase-env.sh

~~~sh

export JAVA_HOME=/data0/soft/java

export HBASE_CLASSPATH=/data0/soft/hadoop-2.6.0-cdh5.5.0/etc/hadoop

export HBASE_HEAPSIZE=8192

export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/data0/dfs/hbase/logs/hbase-gc.log -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60"

export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data0/dfs/hbase/logs/server-gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M"

export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10101"

export HBASE_REGIONSERVER_OPTS="-Xmx32g -Xms32g -Xmn1g -Xss256k -XX:SurvivorRatio=2 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:MaxTenuringThreshold=15  -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 $HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=10102"

export HBASE_LOG_DIR=/data0/dfs/hbase/logs

export HBASE_MANAGES_ZK=true

~~~

​在conf下面添加backup-masters文件

~~~properties

master2

~~~

​在conf下面添加regionservers文件

~~~properties

dmp3

dmp4

dmp5

dmp6

~~~

### 8.3 启动与关闭

访问master1:16010可以看到hbase集群状态

~~~shell

#启动和停止hbase相关主要服务

start-hbase.sh

stop-hbase.sh

#启动thrift服务

hbase-daemon.sh start thrift -p 9090

#启动rest服务

hbase-daemon.sh start rest -p 8180

~~~

猜你喜欢

转载自gujialiangsz.iteye.com/blog/2394252