master : 169.254.7.160
worker1 : 169.254.7.161
worker2 : 169.254.7.162
worker3 : 169.254.7.163
worker4 : 169.254.7.164
worker5 : 169.254.7.165
master: namenode,datanode,spark master,worker,hbase
worker1:datanode,worker,hbase
worker2:datanode,worker,hbase
worker3:datanode,worker,kafka,zk,hbase
worker4:datanode,worker,kafka,zk,hbase
worker5:datanode,worker,kafka,zk,hbase
ntpd 对时服务请见:http://acooly.iteye.com/blog/1993484
所用到的安装压缩包都在/home/setups 中 都可以在笔者的云盘中下载。
- 前提:
- 规划好hosts
- ssh免密登录
- java、scala安装并配置环境变量
# 解压hadoop安装包
tar zxvf /home/setups/hadoop-2.7.3.tar.gz -C /usr/local
# 将/usr/local/hadoop-2.7.3 加入 HADOOP_HOME环境变量
# $HADOOP_HOME/bin 和 $HADOOP_HOME/sbin 加入环境变量
# 修改 $HADOOP_HOME/etc/hadoop/core-site.xml
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/bigdata/hadoop/tmp</value>
</property>
# 修改 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=java的环境变量
export HADOOP_HEAPSIZE=8192 # 8G
export HADOOP_NAMENODE_HEAPSIZE=4096 # 4G
export HADOOP_NAMENODE_OPTS="-Xms512m -Dcom.sun.management.jmxremote -D..."
export HADOOP_DATANODE_OPTS="-Xms512m -Dcom.sun.management.jmxremote -D..."
export HADOOP_LOG_DIR=/home/bigdata/hadoop/log
export HADOOP_PID_DIR=/home/bigdata/hadoop/pids
# 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml
<!-- dfs.datanode.max.xcievers -->
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<!-- http://product.hubspot.com/blog/g1gc-tuning-your-hbase-cluster -->
<!-- http://www.cnblogs.com/liuming1992/p/4936655.html -->
<!-- https://community.hortonworks.com/content/supportkb/49619/hbase-settings-to-stop-major-compaction-during-pea.html -->
<property>
<name>dfs.client.read.shortcircuit</name>
<value>true</value>
</property>
<property>
<name>dfs.domain.socket.path</name>
<value>/var/run/hadoop-hdfs/dn._PORT</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/bigdata/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.handler.count</name>
<value>64</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>64</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>/home/bigdata/hadoop/hdfs/data</value>
</property>
# 修改$HADOOP_HOME/etc/hadoop/mapred-env.sh
# export JAVA_HOME=java的环境变量
export HADOOP_MAPRED_LOG_DIR=/home/bigdata/hadoop/log
export HADOOP_MAPRED_PID_DIR=/home/bigdata/hadoop/pids
# 修改$HADOOP_HOME/etc/hadoop/slaves
master
worker1
worker2
worker3
worker4
worker5
# 修改$HADOOP_HOME/etc/hadoop/yarn-env.sh
# 在if中设置 JAVA_HOME=java的环境变量
# 在if中设置 YARN_LOG_DIR="/home/bigdata/hadoop/log"
# 修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
# 将环境变量文件同步到各worker。
# 在各worker中 是环境变量生效
# 将/usr/local/hadoop-2.7.3 目录文件同步到其他worker中
# scp -r /usr/local/hadoop-2.7.3 worker1:/usr/local/
# ...
# 将配置的对应目录也同步下,本例的数据文件都配置在/home/bigdata/hadoop中了。
# scp -r /home/bigdata/hadoop worker1:/home/bigdata
# 在每个节点执行如下命令,以连接 libhadoop.so 到jre中
mkdir $JAVA_HOME/jre/amd64 && ln -s /usr/local/hadoop-2.7.3/lib/native/libhadoop.so $JAVA_HOME/jre/amd64/libhadoop.so
# 在每个节点执行如下命令
mkdir -p /var/run/hadoop-hdfs
# 在master中格式化hdfs
hdfs namenode -format
# 启动hdfs
start-dfs.sh
# 确认master jps有 NameNode进程
# 浏览器访问master:50070 有界面展示出来,且展示的datanode个数和配置的一致。
# 启动yarn
start-yarn.sh
# 确认master jps有 ResourceManager进程
# 浏览器访问master:50070 有界面展示出来,且展示的datanode个数和配置的一致。
# 日志也很重要
mr-jobhistory-daemon.sh start historyserver
# hdfs 和 yarn就算安装成功了。
# 安装spark,其中spark-2.1.0-bin-hadoop2.7.tgz 存放在/home/setups 目录下
# 压缩包解压至/usr/local
tar zxvf /home/setups/spark-2.1.0-bin-hadoop2.7.tgz -C /usr/local
# 将spark-2.1.0-bin-hadoop2.7 加入 SPARK_HOME环境变量
# $SPARK_HOME/bin 加入环境变量并使环境变量生效
# 修改$SPARK_HOME/conf/slaves
master
worker1
worker2
worker3
worker4
worker5
# 复制spark默认配置模版,用来简化配置
cp spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf
# 配置开启日志输出
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:9000/logs/spark/event_log/history
# 配置的目录需要在hdfs中创建下。
hdfs dfs -mkdir -p /logs/spark/event_log/history
# 复制spark默认配置模版,用来简化配置
cp spark-env.sh.template spark-env.sh
export SPARK_WORKER_DIR=/home/bigdata/spark/worker
export JAVA_HOME=java的环境变量
export SCALA_HOME=scala的环境变量
export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.3/etc/hadoop/
export SPARK_MASTER_IP=169.254.7.160
export SPARK_LOG_DIR=/home/bigdata/spark/logs
export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:$HADOOP_HOME/lib/native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:$HADOOP_HOME/lib/native
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=50 -Dspark.history.fs.logDirectory=hdfs://master:9000/logs/spark/event_log/history"
# 新建
# 将环境变量文件同步到各worker。
# 在各worker中 是环境变量生效
# 将/usr/local/spark-2.1.0-bin-hadoop2.7 目录文件同步到其他worker中
# scp -r /usr/local/spark-2.1.0-bin-hadoop2.7 worker1:/usr/local/
# ...
# 将配置的对应目录也同步下,本例的数据文件都配置在/home/bigdata/spark中了。
# scp -r /home/bigdata/spark worker1:/home/bigdata
# 启动spark
cd $SPARK_HOME && sbin/start-all.sh
# 也可以在各节点 启动slave
cd $SPARK_HOME/sbin && ./start-slave.sh -h master spark://master:7077
cd $SPARK_HOME/sbin && ./start-slave.sh -h worker1 spark://master:7077
cd $SPARK_HOME/sbin && ./start-slave.sh -h worker2 spark://master:7077
cd $SPARK_HOME/sbin && ./start-slave.sh -h worker3 spark://master:7077
cd $SPARK_HOME/sbin && ./start-slave.sh -h worker4 spark://master:7077
cd $SPARK_HOME/sbin && ./start-slave.sh -h worker5 spark://master:7077
# 确认master jps有 Master 和 Worker 进程
# 浏览器访问master:8080 有界面展示出来,且展示的workers个数和配置的一致。
# 启动日志
cd $SPARK_HOME && sbin/start-history-server.sh
至此spark standalone模式安装完成。
# 按照规划,zookeeper是在worker3、worker4、worker5上,此处我们在worker3安装第一台
# 新建zookeeper的数据目录
mkdir -p /home/bigdata/zookeeper/data
# 准备zookeeper的日志目录
mkdir -p /home/bigdata/zookeeper/log
# 安装zookeeper
tar zxvf /home/setups/zookeeper-3.4.9.tar.gz -C /usr/local
cd /usr/local/zookeeper-3.4.9/conf
# 复制zookeeper默认配置模版,用来简化配置
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/home/bigdata/zookeeper/data
dataLogDir=/home/bigdata/zookeeper/log
server.3=worker3:2888:3888
server.4=worker4:2888:3888
server.5=worker5:2888:3888
# 同步zookeeper安装目录
scp -r /usr/local/zookeeper-3.4.9 worker4:/usr/local/
scp -r /usr/local/zookeeper-3.4.9 worker5:/usr/local/
# 同步zookeeper数据目录
scp -r /home/bigdata/zookeeper worker4:/home/bigdata/
scp -r /home/bigdata/zookeeper worker5:/home/bigdata/
# 登录worker3,修改worker3的myid
echo "3" >> /home/bigdata/zookeeper/data/myid
# 登录worker4,修改worker4的myid
echo "4" >> /home/bigdata/zookeeper/data/myid
# 登录worker5,修改worker5的myid
echo "5" >> /home/bigdata/zookeeper/data/myid
# 以上zookeeper安装步骤顺序不能打乱。
# 将ZOOKEEPER_HOME配置进环境变量
# 在worker3~worker5中启动zk
zkServer.sh start $ZOOKEEPER_HOME/conf/zoo.cfg
# 确认各节点的状态
zkServer.sh status
# 是leader或是follower 就OK
# zookeeper安装完毕
# 安装kafka
# 准备kafka日志目录
mkdir -p /home/bigdata/kafka/log/
# 解压安装包
tar zxvf /home/setups/kafka_2.11-0.10.1.0.tgz -C /usr/local/
cd /usr/local/kafka_2.11-0.10.1.0/config
# 修改配置文件server.properties
vi server.properties
# 日志保存时间(小时)
log.retention.hours=720
# 和本次搭建无关,存做记录。内网按地址访问时不通时,配置这个参数
# listeners = PLAINTEXT://192.168.8.123:8689
log.dirs=/home/bigdata/kafka/log/ # 配置目录
# 使用外部的zk,上面已经搭建过了
zookeeper.connect=worker3:2181,worker4:2181,worker5:2181
# 日志刷新
log.flush.interval.messages=10000 # 每10000条记录溢出到磁盘
log.flush.interval.ms=1000 # 每秒溢出到磁盘
log.retention.bytes=10737418244 # 每个文件保留1G
# 修改配置文件server.properties 完成
# 复制kafka到worker4和worker5
scp -r /usr/local/kafka_2.11-0.10.1.0 worker4:/usr/local/
scp -r /usr/local/kafka_2.11-0.10.1.0 worker5:/usr/local/
# 复制kafka 目录到worker4和worker5
scp -r /home/bigdata/kafka worker4:/home/bigdata
scp -r /home/bigdata/kafka worker5:/home/bigdata
# 修改worker3上的broker.id
vi /usr/local/kafka_2.11-0.10.1.0/config/server.properties
broker.id=3
# 修改worker4上的broker.id
vi /usr/local/kafka_2.11-0.10.1.0/config/server.properties
broker.id=4
# 修改worker5上的broker.id
vi /usr/local/kafka_2.11-0.10.1.0/config/server.properties
broker.id=5
# 将KAFKA_HOME配置进环境变量
# 在worker3~worker5上启动kafka
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
# 新建一个topic测试下
./kafka-topics.sh --create --zookeeper worker3:2181,worker3:2181 --replication-factor 2 --partitions 1 --topic
test
# 安装hbase
# 准备hbase 日志目录
mkdir -p /home/bigdata/hbase/logs
# 解压缩hbase安装包
tar zxvf /home/setups/hbase-1.2.4-bin.tar.gz -C /usr/local/
cd /usr/local/hbase-1.2.4/conf
# 修改hbase-env.sh
export JAVA_HOME=java的环境变量
# 取消jdk8中不在支持的jvm参数,主要是删除PermSize和MaxPermSize参数
# hbase g1 gc 的 博文:
# http://product.hubspot.com/blog/g1gc-tuning-your-hbase-cluster
export HBASE_MASTER_OPTS=
export HBASE_REGIONSERVER_OPTS=
# 修改日志目录
export HBASE_LOG_DIR=/home/bigdata/hbase/logs
# 不使用hbase内置的zookeeper
export HBASE_MANAGES_ZK=false
# hbase-env.sh 修改 完毕
# 修改hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase/data</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>worker3:2181,worker4:2181,worker5:2181</value>
</property>
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>2100000000</value>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>536870912000</value>
</property>
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
<!-- http://koven2049.iteye.com/blog/1006436 -->
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>8</value>//内存充足确保不会产生OOM的情况下,调大此值
</property>
<property>
<name>hbase.server.thread.wakefrequency</name>
<value>100</value>//减少睡眠等待时间,默认值为10000
</property>
<!-- 这一组说明非高峰时间段 -->
<!-- https://community.hortonworks.com/articles/52616/hbase-compaction-tuning-tips.html -->
<!-- https://community.hortonworks.com/content/supportkb/49619/hbase-settings-to-stop-major-compaction-during-pea.html -->
<property>
<name>hbase.offpeak.start.hour</name>
<value>2</value>
</property>
<property>
<name>hbase.offpeak.end.hour</name>
<value>3</value>
</property>
<!-- hbase.dfs.client.read.shortcircuit.buffer.size 短路缓冲大小 -->
# 修改 /usr/local/hbase-1.2.4/conf/regionservers
# 理论上和 $HADOOP_HOME/etc/hadoop/slaves 文件内容一样
rm -f /usr/local/hbase-1.2.4/conf/regionservers && cp $HADOOP_HOME/etc/hadoop/slaves regionservers
# 复制hbase 目录到worker1~worker5
scp -r /usr/local/hbase-1.2.4 worker1:/usr/local
scp -r /usr/local/hbase-1.2.4 worker2:/usr/local
scp -r /usr/local/hbase-1.2.4 worker3:/usr/local
scp -r /usr/local/hbase-1.2.4 worker4:/usr/local
scp -r /usr/local/hbase-1.2.4 worker5:/usr/local
# 复制hbase日志目录到worker1~worker5
scp -r /home/bigdata/hbase worker1:/home/bigdata/
scp -r /home/bigdata/hbase worker2:/home/bigdata/
scp -r /home/bigdata/hbase worker3:/home/bigdata/
scp -r /home/bigdata/hbase worker4:/home/bigdata/
scp -r /home/bigdata/hbase worker5:/home/bigdata/
# 设置 HBASE_HOME 环境变量,同步到worker1~worker5后。source /etc/profile使环境变量生效
# 启动hbase测试
start-hbase.sh
# 浏览器访问master:16010 有界面展示出来,且展示的server个数和配置的一致。
# hbase 巨量数据插入性能调整:
http://joshuasabrina.iteye.com/blog/1798239
# 安装 Hive2
# 解压压缩包
tar zxvf apache-hive-2.1.1-bin.tar.gz -C /usr/local/
# 设置 HIVE_HOME 环境变量
# 使环境变量生效。
# 在hdfs中创建 hive相应的目录并赋权
hdfs dfs -mkdir /tmp
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod g+w /tmp
hdfs dfs -chmod g+w /user/hive/warehouse
cd $HIVE_HOME/conf/
cp hive-log4j2.properties.template hive-log4j2.properties
# 修改 hive-log4j2.properties
vi hive-log4j2.properties
# 修改hive的日志输出目录
property.hive.log.dir=/home/bigdata/hive/logs
# 修改 hive-log4j2.properties 完成
cp hive-env.sh.template hive-env.sh
# 修改hive-env.sh
HADOOP_HOME=/usr/local/hadoop-2.7.3
# 修改hive-env.sh完成
cp hive-default.xml.template hive-site.xml
# 修改hive-site.xml,主要配置hive的metadata为mysql
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/apache_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>这里填用户名</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>这里填密码</value>
</property>
<!-- 将/tmp目录下的所有配置都改成/home/bigdata/hive下,这里不一一列出了 -->
# 将mysql-connector.jar 放入$HIVE_HOME/lib下
cp mysql-connector.jar $HIVE_HOME/lib/
# 初始化 hive元数据 ,保存至mysql,这一步一定要在 上面都完成之后做,笔者做的时候,没有设置hadoop_home,访问的fs.defaultFS是8020,郁闷了好久。
schematool -initSchema -dbType mysql
# 确认是否成功
hive
# 能进入命令行即为成功。
# 后台启动
hiveserver2 start &
# 安装zeppelin
tar zxvf zeppelin-0.7.0-bin-all.tgz -C /usr/local/
cd /usr/local/zeppelin-0.7.0-bin-all/conf/
# 从模版创建 环境配置
cp zeppelin-env.sh.template zeppelin-env.sh
# 编辑 zeppelin-env.sh
vi zeppelin-env.sh
export ZEPPELIN_LOG_DIR=/home/bigdata/zeppelin/logs
export ZEPPELIN_PID_DIR=/home/bigdata/zeppelin/pid
export ZEPPELIN_WAR_TEMPDIR=/home/bigdata/zeppelin/war
export ZEPPELIN_NOTEBOOK_DIR=/home/bigdata/zeppelin/notebook
export JAVA_HOME=
export MASTER=spark的master,如spark://master:7077
export HBASE_HOME=
export HBASE_CONF_DIR=
# 编辑 zeppelin-env.sh 完成
# 从模版创建 配置
cp zeppelin-site.xml.template zeppelin-site.xml
vi zeppelin-site.xml
<!-- 修改端口配置 -->
<property>
<name>zeppelin.server.port</name>
<value>7070</value>
</property>
# 将ZEPPELIN_HOME加入环境变量,并使生效
zeppelin-daemon.sh start # 启动
zeppelin-daemon.sh stop # 停止
# kudu 安装
# 使用rpm包安装
# rpm -ivh 各种包名,如:
# 先在 master 节点安装
rpm -ivh kudu-debuginfo-1.2.0+cdh5.10.0+0-1.cdh5.10.0.p0.56.el6.x86_64.rpm
一共有6个包。
# 新增目录
mkdir -p /home/kudu/master/log
mkdir -p /home/kudu/tserver/log
# 设置权限
chown -R kudu:kudu /home/kudu
# 配置目录
# master 配置设置,各节点相同
vi /etc/kudu/conf/master.gflagfile
# 修改如下内容
--fs_wal_dir=/home/kudu/master/wal
--fs_data_dirs=/home/kudu/master/data
--default_num_replicas=1 //设置备份数 不设置默认为3
--master_addresses=master:7051 # 多个master用逗号分隔,在这里配置
vi /etc/default/kudu-master # 各节点都不同
export FLAGS_log_dir=/home/kudu/master/log
export FLAGS_rpc_bind_addresses=master:7051 # 这里只配自己的RPC端口
# master 配置设置完成
# tserver 配置设置 ,各节点相同
vi /etc/kudu/conf/tserver.gflagfile
# 修改如下内容
--fs_wal_dir=/home/kudu/tserver/wal
--fs_data_dirs=/home/kudu/tserver/data
--tserver_master_addrs=master:7051 # 绑定master节点
vi etc/default/kudu-tserver # 各节点都不同
export FLAGS_log_dir=/home/kudu/tserver/log
export FLAGS_rpc_bind_addresses=master:7050
# tserver 配置设置完成
# 启动 或 关闭
service kudu-master start | stop
service kudu-tserver start | stop
# 启动后,可以在 master:8051中打开浏览器看到对应的web控制台。