2018/12/12整理

Centos7 jdk1.8.0 hadoop-2.8.4 zookeeper-3.5.4 hbase-2.0.1 flume1.8.0 spark-2.3.1-bin-hadoop2.7
scala-2.12.6 redis-4.0.11

校准系统时间:sudo /usr/sbin/ntpdate stdtime.gov.hk
根据矫正过的系统时间设置硬件时钟:sudo hwclock -w

目录

1、安装hadoop-2.8.4 1

2、配置zookeeper-3.5.4-beta 4

3、安装hbase 5

4、hbase建库建表 7

5、安装flume 8

6、安装spark 9

7、安装redis-4.0.11 10

8、kafka集群安装配置 12

9、spark streaming 接收kafka通道数据流

1、安装hadoop-2.8.4

1、修改主机名

机名修改vim /etc/hostname

映射修改vim /etc/hosts

192.168.1.100 master

192.168.1.101 slave1

192.168.1.102 slave2

检查是否ping通:ping master –c 3

2、创建hadoop用户和用户组

添加用户:useradd hadoop

密码:passwd hadoop

将用户添加到组:usermod –a –G hadoop hadoop

查询结果:cat /etc/group

设置管理员权限:visudo
修改文件如下:

root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL

2、设置SSH免密登录

用hadoop用户登录
#查看是否安装了ssh服务:rpm –qa | grep ssh
查看ssh服务是否启动:ps -e | grep ssh
测试SSH是否能用:ssh 主机名
cd ~/.ssh/
创建钥匙:ssh-keygen -t rsa
将公匙加入keys中:cat id_rsa.pub >> authorized_keys
修改文件夹权限chmod 600 ./authorized_keys
把node1和node2的id_rsa.pub传给master:
scp id_rsa.pub admin@master:~/.ssh/id_rsa.pub.slave1
在master上综合所有公匙:
cat id_rsa.pub>>authorized_keys
cat id_rsa.pub.slave1>>authorized_keys
cat id_rsa.pub.slave2>>authorized_keys
将master中的公匙authorized_keys复制到node1和node2的.ssh目录下
scp authorized_keys admin@slave1:/home/admin/.ssh/authorized_keys
scp authorized_keys admin@slave2:/home/admin/.ssh/authorized_keys

** 插播:修改屏幕分辨率:**
1 查看现有分辨率 xrandr
2 添加自己想要的分辨率 cvt 1600 900
3 增加新的分辨率 xrandr --newmode "16000x900_60.00" 106.50 1440 1528 1672 1904 900 903 909 934 -hsync +vsync
--newmode后面的参数就是使用cvt的返回值Modeline后面的部分
4.为当前显示增加这个分辨率 xrandr --addmode VGA-1 1440x900_60.00
5 设置分辨率 xrandr --output VGA-1 --mode 1600x900_60.00

3、安装jdk

查看原装jdk: rpm -qa | grep java
卸载原先的jdk:
sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
sudo rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
sudo rpm -e --nodeps java-1.7.0-openjdk-1.7.0.171-2.6.15.5.el7.x86_64
sudo rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64

sudo mkdir /usr/java
解压到/sur/java中:sudo tar -zxvf 下载/jdk-8u172-linux-x64.tar.gz -C /usr/java/
配置本用户的环境变量:sudo vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0
export CLASSPATH=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export PATH=JAVAHOME/bin:JAVA_HOME/bin:PATH

4、用hadoop用户进入安装hadoop

解压hadoop:tar -zxvf 下载/hadoop-2.8.4.tar.gz -C /home/admin/app/

sudo vim /home/admin/app/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME变量,修改此变量如下
export JAVA_HOME=/usr/java/jdk1.8.0

赋予读写权限:sudo chmod 774 /home/admin/app/hadoop/etc/hadoop/

修改配置文件:vim /home/admin/app/hadoop/etc/hadoop/core-site.xml
①core-site.xml

<configuration>
	<property>
		<name>hadoop.tmp.dir</name>
		<value>file:/home/admin/app/hadoop/tmp</value>
	</property>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://master:9000</value>
	</property>
</configuration>

②hdfs-site.xml

<configuration>
	<property>
		<name>dfs.replication</name>
		<value>2</value>
	</property>
	<property>
		<name>dfs.namenode.name.dir</name>
		<value>file:/home/admin/app/hadoop/tmp/dfs/name</value>
	</property>
	<property>
		<name>dfs.datanode.data.dir</name>
		<value>file:/home/admin/app/hadoop/tmp/dfs/data</value>
	</property>
	<property>
		<name>dfs.datanode.http.address</name><!--hbase访问ip-->
		<value>0.0.0.0:50075</value>
	</property>
	<property>
		<name>dfs.replication.interval</name><!--hadoop检查备份的时间间隔-->
		<value>30</value>
	</property>
	<property>
		<name>dfs.datanode.handler.count</name><!--增加datanode的handler数-->
		<value>300</value>
	</property>
	<property>
		<name>dfs.namenode.handler.count</name><!--namenode的handler数-->
		<value>300</value>
	</property>
	<property>
		<name>dfs.datanode.max.xcievers</name><!--datanode的handler数-->
		<value>1024</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>
	<property>
	    <name>yarn.log-aggregation-enable</name>
	    <value>true</value>
	</property>
</configuration>

⑤在master机上在slaves中将localhost改为node1和node2

修改hadoop启动与停止pid文件
将hadoop/sbin/hadoop-daemon.sh中添加HADOOP_PID_DIR=/home/admin/app/hadoop/pids
将hadoop/sbin/yarn-daemon.sh中添加TARN_PID_DIR=/home/admin/app/hadoop/pids

⑥时间同步:
在hadoop-env.sh添加:
export HADOOP_OPTS="HADOOPOPTSDuser.timezone=GMT+08"yarnenv.shYARNOPTS="HADOOP_OPTS -Duser.timezone=GMT+08" 在yarn-env.sh YARN_OPTS="YARN_OPTS -Duser.timezone=GMT+08"

⑦发送到slave1,slave2
scp -r hadoop admin@slave1:/home/admin/app/

首次启动格式化:hdfs namenode -format

在浏览器中
http://master:8088
master:50070

hadoop进程:
master: NameNode,SecondaryNameNode,ResourceManager
slave1:DataNode,NodeManager
slave2:DataNode,NodeManager

##5、各节点IP与名称
192.168.146.140 master
192.168.146.141 node1
192.168.146.142 node2

关闭防火墙:systemctl stop firewalld
查看防火墙状态:firewall-cmd --state

2、配置zookeeper-3.5.4-beta

1. 解压:cd /home /下载

tar -zxvf 下载/zookeeper-3.5.4-beta.tar.gz -C /home/admin/app

2. 配置环境变量:

vim /etc/profile
source /etc/profile

export ZOOKEEPER_HOME=/home/admin/app/zookeeper
export PATH=PATH:PATH:ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

3. 修改配置文件

cd /home/hadoop/zookeeper-3.5.4-beta/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

tickTime=5000
initLimit=10
syncLimit=5
dataDir=/home/hadoop/app/zookeeper/data
clientPort=2181
dataLogDir=/home/hadoop/app/zookeeper/datalog

server.1=master:2888:3888
server.2=node1:2888:3888
server.3=node2:2888:3888

在zookeeper文件夹下创建data和datalog文件夹,在data文件夹下创建一个文件myid,内容为数字x,x为上配置中server.x中的数字:
vim /home/hadoop//zookeeper-3.5.4-beta/data/myid

4. 启动zookeeper:注意要按照myid大小顺序来依次在主机上启动:

zkServer.sh start
zkServer.sh restart
zkServer.sh stop
启动zookeeper/bin/zkServer.sh start
重启zookeeper/bin/zkServer.sh restart

查看状态zookeeper/bin/zkServer.sh status
修改文件夹权限:sudo chmod -R 777 zookeeper
修改文件及子文件所属用户和用户组:sudo chown -R hadoop:hadoop zookeeper

启动成功:输入zkServer.sh status命令可以看到如下信息则表示安装配置成功
Mode:follower(或者是leader)

zookeeper进程:
master:QuorumPeerMain
slave1:QuorumPeerMain
slave2:QuorumPeerMain

连接客户端:zkCli.sh -timeout 5000 -r -server master:2181

3、安装hbase

1. 解压:cd /下载

tar -zxvf 下载/hbase-2.0.1-bin.tar.gz -C /home/admin/app

2. 配置环境变量:

vim /etc/profile
source /etc/profile

export HBASE_HOME=/home/admin/app/hbase
export PATH=PATH:PATH:HBASE_HOME/bin

3. 配置文件sudo gedit hbase/conf/hbase-env.sh

  1. hbase-env.sh
    export JAVA_HOME=/usr/java/jdk1.8.0
    export HBASE_MANAGES_ZK=false
  1. 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.master</name>
    	<value>master:60000</value>
    </property>
    </configuration>
  1. regionservers
    slave1
    slave2

将hbase文件发送到slave1和slave2的相应位置:
scp -r hbase admin@slave1:/home/admin/app/
scp -r hbase admin@slave2:/home/admin/app/

4. 启动hbase: start-hbase.sh

启动HBase的shell命令:hbase shell

先启动regionserver,在启动HMaster
在regionServer上./hbase-daemon.sh start regionserver
在master上执行:./bin/hbase-daemon.sh start master

5. 访问web页面:http://master:16010

6. 设置备用hmaster: 在hbase/conf下新建文件backup-masters ,添加slave1作为备用hmaster

7. hbase启动错:Causedby:java.lang.ClassNotFoundException:org.apache.htrace.SamplerBuilder

解决办法:cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/

hbase进程:
master: HMaster
slave1:HRegionServer
slave2:HRegionServer

4、hbase建库建表

1. 建表

建表: create ‘stu’, ‘information’ ,‘score’
禁用表:disable ‘stu’
删除表:(删除之前必须先禁用):drop 'stu'
验证表是否被删除: exists 'stu'
清空表:truncate 'test'
create 'test','ts',SPLITS=>['0050','0100','0150','0200','0250','0300','0350','0400','0450','0500','0550','0600','0650','0700','0750','0800','0850','0900','0950','1000']

create 'test','ts',SPLITS=>['10','20','30']

2. 增

插值:
put 'stu','row0','information:name','Chengang'
put 'stu','row0','information:sex','man'
put 'stu','row0','information:age','23'
put 'stu','row0','score:math','99'
put 'stu','row0','score:English','89'
put 'stu','row0','score:hbase','100'

3. 删

删除特定单元格:delete ‘stu’,’row2’,’score:hbase’
删除所有单元格:delete ‘stu’,’row2’

4. 查

读取指定行:get ’’,’row1’
读取指定列:get 'stu','row1',{COLUMN=>'information:name'}

5. 改

更新:put 'stu','row2','score:English','99'

6. 常用指令:

1列出表中所有数据:scan ‘stu’
2计算表的行数量:count ‘stu’
3为用户hadoop授予特定的权限:grant ‘hadoop’,’RXA’
R - 代表读取权限
W - 代表写权限
X - 代表执行权限
C - 代表创建权限
A - 代表管理权限
4撤销用户hadoop访问表(所有权限)的权限:revoke ‘hadoop’
5列出stu表的所有用户权限: user_permission ‘stu’

5. 安装flume

1. 解压 安装

sudo tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /home/hadoop

2. 配置环境变量

sudo gedit /etc/profile
source /etc/profile
export FLUME_HOME=/home/hadoop/flume
export FLUME_CONF=FLUMEHOME/confexportPATH=FLUME_HOME/conf export PATH=PATH:$FLUME_HOME

3. 配置flume-env.sh

	cd /home/hadoop/flume/conf
	sudo cp ./flume-env.sh.template ./flume-env.sh
	sudo gedit ./flume-env.sh
	export JAVA_HOME=/usr/java/jdk1.8.0

4. 写hbase-sink-aysn.conf,用于执行flume写入hbase

gedit /home/hadoop/flume/conf/hbase-sink-aysn.conf

将以下复制:

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = syslogtcp
a1.sources.r1.bind = master
a1.sources.r1.port = 44444
a1.sources.r1.eventSize = 1000

# Describe the sink
a1.sinks.k1.type = asynchbase
a1.sinks.k1.table = student
a1.sinks.k1.columnFamily = information
a1.sinks.k1.serializer.payloadColumn=id,name,age,
a1.sinks.k1.batchSize = 10
a1.sinks.k1.serializer = org.apache.flume.sink.hbase.AsyncHbaseEventSerializer

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

5. 启动flume服务

flume-ng agent -c conf -f tcp_hbase.conf -n a1 -Dflume.root.logger=INFO,console --conf = conf

查看写入的数据文件hadoop fs -ls /flume
打开数据文件hadoop fs -cat /flume/master.1531133606859

6. 安装spark

安装spark之前需要先安装scala

  1. scala安装
    解压
    到/home/hadoop/app : tar -zxvf scala-2.12.6.tgz -C /home/admin/app将scala-2.12.6重命名为scala
    配置环境变量:
export SCALA_HOME=/home/admin/app/scala   
export PATH=$PATH:$SCALA_HOME/bin

测试是否安装成功:scala -version
2. 安装spark

1. 解压

到/home/hadoop/app :
tar -zxvf spark-2.3.1-bin-hadoop2.7.tgz -C /home/admin/app
将 spark-2.3.1-bin-hadoop2.7重命名为spark

2. 配置环境变量:

export SPARK_HOME=/home/admin/app/spark
export PATH=PATH:PATH:SPARK_HOME/sbin:$SPARK_HOME/bin

3. 配置/spark/conf/spark-env.sh文件

export JAVA_HOME=/usr/local/jdk1.8.0 
export HADOOP_HOME=/home/hadoop/app/hadoop 
export SCALA_HOME=/home/hadoop/app/scala 
export HBASE_HOME=/home/hadoop/app/hbase 
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop/etc/hadoop 
export SPARK_MASTER_HOST=master 
export SPARK_MASTER_PORT=7077 
export SPARK_MASTER_WEBUI_PORT=7078 
export SPARK_WORKER_MEMORY=30G 
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

4. cp spark-env.sh.template spark-env.sh

加入spark.master spark://master:8040

5. cp slaves.template slaves

加入
master
slave1
slave2

6. 启动spark集群: start-all.sh stop-all.sh

7. spark提交任务

./bin/spark-submit --class com.spark.kafkaConsumer.SparkFromKafka --master spark://master:7077 --executor-memory 8G --total-executor-cores 8 /home/hadoop/workspace/KafkaConsumer/target/KafkaConsumer-0.0.1-SNAPSHOT-jar-with-dependencies.jar			

spark-shell --master yarn
nmap -p 7077 master_ip

7.安装redis-4.0.11

192.168.1.100 7001 7004
192.168.1.101 7002 7005
192.168.1.102 7003 7006

1. 解压

到/home/hadoop/app :tar -zxvf redis-4.0.11.tar.gz -C /home/admin/app
重命名为redis

编译:make && make install

2. 配置redis集群:

在redis/目录下:
mkdir -p redis-cluster/{7001,7004}
cp redis.conf redis-cluster/7001/redis-7001.conf
cp redis.conf redis-cluster/7004/redis-7004.conf
修改:
bind 192.168.1.100
port 7001
daemonize yes (redis后台运行)
cluster-enabled yes(启动集群模式)
appendonly yes (开启自动持久化)
dir /home/admin/app/redis/redis-cluster/7001/data (data存放目录)
logfile /home/admin/app/redis/redis-cluster/7001/log/redis-7001.log
pidfile /var/run/redis_7001.pid (pid 7001和port要对应)
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000

3. 指定配置文件启动:

cd redis/src ./redis-server ../reids.conf

4.集群搭建

每台机子上都按上述步骤安装redis

5. 配置步骤参照https://www.cnblogs.com/ding2016/p/7892542.html

6. 删除某文件夹下所有文件:

rm -r app/redis/redis-cluster/7002/data/*
rm -r app/redis/redis-cluster/7002/log/*

7. 启动集群: redis/

8. 启动六个节点的服务:

master:
src/redis-server redis-cluster/7001/redis-7001.conf
app/redis/src/redis-server app/redis/redis-cluster/7004/redis-7004.conf
slave1: 
app/redis/src/redis-server app/redis/redis-cluster/7002/redis-7002.conf
app/redis/src/redis-server app/redis/redis-cluster/7005/redis-7005.conf
slave2:
app/redis/src/redis-server app/redis/redis-cluster/7003/redis-7003.conf
app/redis/src/redis-server app/redis/redis-cluster/7006/redis-7006.conf

9. 查看服务是否启动: ps -ef | grep redis

10. 进入redis目录启动集群 ;

src/redis-trib.rb create --replicas 1 192.168.1.100:7001 192.168.1.101:7002 192.168.1.102:7003 192.168.1.100:7004 192.168.1.101:7005 192.168.1.102:7006

src/redis-trib.rb create --replicas 1 110.1.1.1:7001 110.1.1.101:7002 110.1.1.102:7003 110.1.1.1:7004 110.1.1.101:7005 110.1.1.102:7006

11. 进入客户端

./src/redis-cli -c -h 192.168.1.100 -p 7001
查看redis的延迟数据: Redis-cli --latency -h 127.0.0.1 -p 6379

7.5重启后报错:Node 192.168.1.101:7001 is not empty. Either the node already knows other no
ps -ef | grep redis ,
kill 掉6个redis进程,删除reids/redis-cluster/7001/data中的所有文件
重新启动所有服务

新增结点:src/redis-trib.rb add-node 192.168.1.100:7007 192.168.1.100:7001

12. 常见redis命令

集群
cluster info 打印集群的信息
cluster nodes 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
节点
cluster meet 将ip和port所指定的节点添加到集群当中,让它成为集群的一份子。
cluster forget <node_id> 从集群中移除 node_id 指定的节点。
cluster replicate <node_id> 将当前节点设置为node_id指定的节点的从节点。
cluster saveconfig 将节点的配置文件保存到硬盘里面。
槽(slot)
cluster addslots [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
cluster delslots [slot ...] 移除一个或多个槽对当前节点的指派。
cluster flushslots 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
cluster setslot node <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
cluster setslot migrating <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
cluster setslot importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
cluster setslot stable 取消对槽 slot 的导入(import)或者迁移(migrate)。

cluster keyslot 计算键 key 应该被放置在哪个槽上。
cluster countkeysinslot 返回槽 slot 目前包含的键值对数量。
cluster getkeysinslot 返回 count 个 slot 槽中的键。

13. redis数据备份及回复

  1. dump.rdb 方式
    安装数据解析工具执行命令:
    easy_install pip
    install rdbtools
    将rdb文件转为json文件
    rdb --command json redis-cluster/7001/data/dump.rdb>redis-cluster/7001/data/dump.json

8 .kafka集群安装配置

①解压到指定文件夹 tar -zxvf 下载/kafka_2.12-2.0.0.tgz -C /home/admin/app/

②修改配置文件 kafka/config/server.properties

broker.id=0
listeners=PLAINTEXT://master:9092
advertised.listeners=PLAINTEXT://master:9092
log.dirs=/home/admin/app/kafka/kafka-logs
zookeeper.connect=master:2181,slave1:2181,slave2:2181

③讲kafka文件发送到slave1和slave2

scp -r kafka admin@slave1:/home/admin/app/
scp -r kafka admin@slave2:/home/admin/app/

④修改slave1中的配置文件kafka/config/server.properties

broker.id=1
listeners=PLAINTEXT://slave1:9092
advertised.listeners=PLAINTEXT://slave1:9092
log.dirs=/home/hadoop/app/kafka/kafka-logs
zookeeper.connect=master:2181,slave1:2181,slave2:2181

⑤修改slave2中的配置文件kafka/config/server.properties

broker.id=2
listeners=PLAINTEXT://slave2:
advertised.listeners=PLAINTEXT://slave2:9092
log.dirs=/home/hadoop/app/kafka/kafka-logs
zookeeper.connect=master:2181,slave1:2181,slave2:2181

⑥测试
在每个节点启动kafka服务: bin/kafka-server-start.sh -daemon config/server.properties &
后台启动:bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
1创建topic: ./bin/kafka-topics.sh --create --zookeeper master:2181,slave1:2181,slave2:2181 --replication-factor 2 --partitions 1 --topic topic1
2生产者bin/kafka-console-producer.sh --broker-list slave1:9092 --topic topic6
3消费者bin/kafka-console-consumer.sh --bootstrap-server master:9092 --topic topic6 –from-beginning
4查看所有topic: ./bin/kafka-topics.sh --list --zookeeper master:2181
5查看某topic详细信息: bin/kafka-topics.sh --describe --zookeeper master:2181 --topic topic1
6 查看所有topic详细信息: bin/kafka-topics.sh --describe --zookeeper master:2181
7删除topic :bin/kafka-topics.sh --delete --zookeeper master:2181 --topic topic1
8停止kafka服务:bin/kafka-server-stop.sh
9错误记录: kafka进程启动后一会儿自动挂掉,修改/kafka/kafka-logs/meta.properties中的broker.id与server.properties中的broker.id一致
10错误记录: KafkaConsumer is not safe for multi-threaded access
KafkaConsumer是非线程安全的类,当使用多个线程操作同一个KafkaConsumer对象时就会引起这个错误。

PartitionCount:分区个数
??ReplicationFactor:副本个数
??Partition:分区
??Leader:负责处理消息的读和写,leader是从所有节点中随机选择的.当前partition起作用的breaker.id
??Replicas: 列出了所有的副本节点,不管节点是否在服务中.
??Isr:是正在服务中的节点.

9.spark streaming 接收kafka通道数据流

②集群
./bin/spark-submit --class edu.wuli.gqzx.kafkaConsumer.SparkFromKafka --master spark://master:7077 --executor-memory 8G --total-executor-cores 30 /home/admin/workspace/workspace2/KafkaConsumer/target/KafkaConsumer-0.0.1-SNAPSHOT-jar-with-dependencies.jar

10.spark数据处理记录

①map函数与flatmap函数
map函数: 顾名思义,将一个函数传入map中,然后利用传入的这个函数,将集合中的每个元素处理,并将处理后的结果返回。
flatMap函数: flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List,其实这也不难理解,既然是flatMap,那除了map以外必然还有flat的操作,所以需要返回值是List才能执行flat这一步.

11.redis优化记录

redis-7001.conf文件:
maxmemory 68719476736 #559
maxmemory-policy volatile-ttl #590
cluster-require-full-coverage no #905

1) 在Redis配置文件中(一般叫Redis.conf),通过设置“maxmemory”属性的值可以限制Redis最大使用的内存若是启用了Redis快照功能,应该设置“maxmemory”值为系统可使用内存的45%,因为快照时需要一倍的内存来复制整个数据集,也就是说如果当前已使用45%,在快照期间会变成95%(45%+45%+5%),其中5%是预留给其他的开销。 如果没开启快照功能,maxmemory最高能设置为系统可用内存的95%。
2) 当内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值。 若是Redis数据集中的key都设置了过期时间,那么“volatile-ttl”策略是比较好的选择。但如果key在达到最大内存限制时没能够迅速过期,或者根本没有设置过期时间。那么设置为“allkeys-lru”值比较合适,它允许Redis从整个数据集中挑选最近最少使用的key进行删除(LRU淘汰算法)。Redis还提供了一些其他淘汰策略,如下:
volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。
volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
allkeys-random:从数据集合中任意选择数据淘汰
no-enviction:禁止淘汰数据。
3) 槽是否全覆盖:cluster-require-full-coverage no。默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
4) list-compress-depth 0
设置: 列表也可能被压缩
0:禁用所有列表压缩。
1:depth 1的意思是“在1个节点进入列表后,从头部或尾部开始压缩”
So:[head]->node->node->...->node->[tail],[head],[tail]将始终未压缩;内部节点将压缩。
2: [head]->[next]->node->node->...->node->[prev]->[tail]
2在这里的意思是:不要压缩head或head->next或tail->prev或tail,而是压缩它们之间的所有节点。
3:[head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
5) 内核参数 overcommit_memory 1
有三种方式修改内核参数,但要有root权限:
(1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
(2)sysctl vm.overcommit_memory=1
(3)echo 1 > /proc/sys/vm/overcommit_memory
建议使用方法 1
它是 内存分配策略
可选值:0、1、2。
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

12. hbase优化记录

putlist大小
2524288000/74176
2
524288000/60608

  1. hbase.ipc.server.callqueue.handler.factor
    指定调用队列的数量:
    0 意味着单个共享队列。
    1 意味着每个处理程序的一个队列。
    一个0和1之间的值,按处理程序的数量成比例地分配队列数。例如,0.5 的值在每个处理程序之间共享一个队列。
    2)使用 hbase.ipc.server.callqueue.read.ratio(hbase.ipc.server.callqueue.read.share在0.98中)将调用队列分成读写队列:
    0.5 意味着将有相同数量的读写队列。
    <0.5 表示为读多于写。

    0.5 表示写多于读

3)禁用 Nagle 的算法。延迟的 ACKs 可以增加到200毫秒的 RPC 往返时间。设置以下参数:
在 Hadoop 的 core-site.xml 中:
ipc.server.tcpnodelay = true
ipc.client.tcpnodelay = true
在 HBase 的 hbase-site.xml 中:
hbase.ipc.client.tcpnodelay = true
hbase.ipc.server.tcpnodelay = true

13. 操作系统优化

 1)修改linux打开文件数和进程数
sudo vim /etc/security/limits.conf  加入:
  • soft nofile 102400
  • hard nofile 409600
    sudo vim /etc/security/limits.d/20-nproc.conf
  • soft nproc 409600
  • hard nproc 819200
    2)禁用透明大页面压缩
    root用户执行 echo never > /sys/kernel/mm/transparent_hugepage/defrag
    开机禁用:
    sudo vim /etc/rc.local
    echo never > /sys/kernel/mm/transparent_hugepage/defrag