大数据环境部署、开发和应用(hadoop、spark
写了个WORD版本,直接拷过来,格式就不修正了。
部署部分都是根据我自身的操作记录的,可能存在记录不全的问题,需要自己百度。
其他一些是学习的建议,我学的比较快,部署加学习,两星期就搞定了,所以感觉还是靠谱的。
另外,如果是初学者,建议先花一天时间熟悉下hadoop和spark的生态圈
大数据环境部署............................................................................................................... 1
一、 部署说明............................................................................................................. 2
二、 前期准备............................................................................................................. 2
三、HADOOP部署.......................................................................................................... 2
a)下载JDK,解压并配置JDK环境............................................................................. 2
b)修改各台机器的主机名.......................................................................................... 3
c)配置MASTER到各SLAVE的无密登录..................................................................... 3
d)安装HADOOP.......................................................................................................... 3
e)创建HADOOP结点................................................................................................. 3
f)修改配置文件.......................................................................................................... 3
g)使用pscp命令将主机上的修改同步到从机........................................................... 5
h)格式化namenode................................................................................................... 6
i)启动hadoop............................................................................................................. 6
j)验证分布式集群...................................................................................................... 6
四、SPARK部署............................................................................................................... 6
a)安装SCALA.............................................................................................................. 6
b)下载SPARK,解压,编辑conf/spark-env.sh文件,加入下面的配置参数............. 7
c)配置slaves文件...................................................................................................... 7
d) 同步配置到从机............................................................................................... 7
e)启动Spark分布式集群并查看信息......................................................................... 7
f)测试SPARK集群...................................................................................................... 7
五、HIVE部署................................................................................................................. 7
a)下载HIVE源码包,最新版自行去官网下载........................................................... 7
b)配置环境变量......................................................................................................... 8
c)安装MYSQL............................................................................................................. 8
d)配置HIVE................................................................................................................ 9
六、SPARKSQL部署....................................................................................................... 12
七、开发环境部署........................................................................................................ 12
八、集群监控................................................................................................................ 12
九、spark rdd................................................................................................................. 13
十、spark streaming....................................................................................................... 13
一、 部署说明
a) 使用HADOOP分布式管理数据,一台作为主机,三台作为从机,后续再扩展
b) 使用HIVE构建分区外表,与HDFS上的文件做映射
c) 使用SPARKSQL调用HIVE表提升性能
d) 使用SPARK的其他功能,流处理、机器学习、图像处理等,这些内容后续增加
e) 部署SCALA\JAVA\PYTHON开发环境便于管理和实现功能
二、 前期准备
a) 四台性能稍高的机器,磁盘500G,CPU4核32G(目前测试环境没有按照这个配置)
b) 使用CENTOS6.8 DVD版本制作启动盘并按照系统
c) 系统启动后进入图形界面配置网络(刚开始先在外网环境部署)
d) 永久关闭防火墙chkconfigiptables off
e) 安装一些库 yum install lrzszopenssh-server
f) 安装pssh,下载压缩包编译安装即可。
g) 上面在机房操作,后续可以回到工位用XSHELL进行连接;也可以安装VNC控制图形界面,一般不需要
三、 HADOOP部署
注:hadoop shell需要掌握,http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
a)下载JDK,解压并配置JDK环境
编译 vim /etc/profile
JAVA_HOME=/root/software/jdk1.8.0_111
JRE_HOME=/root/software/jdk1.8.0_111/jre
PATH=$JAVA_HOME/bin:$PATH:JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
生效 source /etc/profile
b)修改各台机器的主机名
vim /etc/sysconfig/network 修改HOSTNAME
vim /etc/hosts 配置如下
*.*.*.180 Master.Hadoop
*.*.*.182 Slave1.Hadoop
*.*.*.183 Slave2.Hadoop
*.*.*.184 ave3.Hadoop
c)配置MASTER到各SLAVE的无密登录
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub root@Slave1.Hadoop:/home
cat /home/id_rsa.pub >> /root/.ssh/authorized_keys
chmod 600 authorized_keys
d)安装HADOOP
下载并解压
添加HADOOP环境变量
编辑 vim /etc/profile
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_HOME=/usr/local/hadoop
生效 source /etc/profile
e)创建HADOOP结点
在各台机器的HADOOP目录下创建tmpdfsdfs/data dfs/name
f)修改配置文件
vim hadoop-env.sh 指定JAVA_HOME
vim yarn-env.sh 指定JAVA_HOME
vim mapred-env.sh 指定JAVA_HOME
配置slaves文件
添加从节点的机器名
修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master.Hadoop:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories. </description>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/dfs/name</value>
</property>
/*配置datanode的数据存储目录*/
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/dfs/data</value>
</property>
/*配置副本数*/
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master.Hadoop:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master.Hadoop:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master.Hadoop:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master.Hadoop:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master.Hadoop:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
</configuration>
g)使用pscp命令将主机上的修改同步到从机
命令格式:pscp -h host.txt 本机路径远程路径
Host.txt为从机的主机名
其中将/etc/profile传过去后需要source /etc/profile生效
h)格式化namenode
hadoopnamenode -format
i)启动hadoop
sbin/start-all.sh
查看是否配置和启动成功
主机上jps
9555 Jps
8405 ResourceManager
8006 NameNode
8221 SecondaryNameNode
从机上jps
24728 NodeManager
24606 DataNode
25423 Jps
可以去MASTER:8088上查看运行情况
j)验证分布式集群
在hdfs文件系统上创建两个目录
hadoop fs -mkdir -p /data/wordcount
hadoop fs -mkdir -p /output
上传一个文本文件
hadoop fs -put xxx.txt /data/wordcount
执行自带的WORDCOUNT例子
hadoop ***examples***.jar wordcount /data/wordcount/ /output/wordcount
四、SPARK部署
a)安装SCALA
Vim /etc/profile
export SCALA_HOME=/home/chengxu/scala-2.10.4/scala-2.10.4
export PATH=${SCALA_HOME}/bin:$PATH
source /etc/profile
b)下载SPARK,解压,编辑conf/spark-env.sh文件,加入下面的配置参数
export SCALA_HOME=/path/to/scala-2.10.4
export SPARK_WORKER_MEMORY=7g
export SPARK_MASTER_IP=172.16.0.140
export MASTER=spark://172.16.0.140:7077
c)配置slaves文件
Slave1
Slave2
Slave3
Slave4
Slave5
d)同步配置到从机
e)启动Spark分布式集群并查看信息
Start-all.sh并jps查看信息:
-bash-4.1# jps
23526 Jps
2127 Master
7396 NameNode
7594 SecondaryNameNode
7681 ourceManager
f)测试SPARK集群
通过SPARK-SHELL读取hdfs文件,并计算单词个数,细节不再赘述
五、HIVE部署
a)下载HIVE源码包,最新版自行去官网下载
wgethttp://mirrors.cnnic.cn/apache/hive/hive-1.2.1/apache-hive-1.2.1-bin.tar.gz
tar -zxf apache-hive-1.2.1-bin.tar.gz -C /usr/local
b)配置环境变量
Vi /etc/profile
HIVE_HOME=/home/hadoop/apache-hive-1.2.1-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_NAME PATH
source /etc/profile
c)安装MYSQL
i. 安装依赖包
yum install gccgcc-c++ ncurses-devel -y
ii. 安装cmake
# wget http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gz
# tar zxvf cmake-2.8.12.tar.gz
# cd cmake-2.8.12
# ./bootstrap
# make && make install
iii. 创建用户的相应目录
# groupaddmysql
# useradd -g mysqlmysql
# mkdir -p /data/mysql/
# mkdir -p /data/mysql/data/
# mkdir -p /data/mysql/log/
iv. 获取mysql安装包并安装
# wget http://dev.mysql.com/get/downloads/mysql/mysql-5.6.25.tar.gz
# tar zxvf mysql-5.6.25.tar.gz
# cd mysql-5.6.25
# cmake \
-DCMAKE_INSTALL_PREFIX=/data/mysql \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/data/mysql/data \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1
如果报错找不到CMakeCache.txt则说明没安装ncurses-devel
# make && make install
v. 修改目录权限
# chmod +w /data/mysql/
# chown -R mysql:mysql /data/mysql/
# ln -s /data/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
# ln -s /data/mysql/mysql.sock /tmp/mysql.sock
vi. 初始化数据库
# cp /data/mysql/support-files/my-default.cnf /etc/my.cnf
# cp /data/mysql/support-files/mysql.server /etc/init.d/mysqld
# /data/mysql/scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf --basedir=/data/mysql --datadir=/data/mysql/data
vii. 启动mysql服务
# chmod +x /etc/init.d/mysqld
# service mysqld start
#ln –s /data/mysql/bin/mysql /usr/bin/
viii. 初始化密码
修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables
重启mysql
再次进入MySQL命令行mysql -uroot -p,输入密码时直接回车,就会进入MySQL数据库了,这个时候按照常规流程修改root密码即可
密码修改完毕后,删掉配置文件中的那行,并且重启MySQL服务,新密码就生效了
ix. 创建hive数据库
mysql>create database hive;
d)配置HIVE
x. 修改配置文件
进入到hive的配置文件目录下,找到hive-default.xml.template,cp份为hive-default.xml
另创建hive-site.xml并添加参数
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://Master.Hadoop:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
<description>
Enforce metastore schema version consistency.
True: Verify that version information stored in metastore matches with one from Hive jars. Also disable automatic
schema migration attempt. Users are required to manully migrate schema after Hive upgrade which ensures
proper metastore schema migration. (Default)
False: Warn if the version information stored in metastore doesn't match with one from in Hive jars.
</description>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>false</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateColumns</name>
<value>true</value>
</property>
</configuration>
xi. JDBC下载
wgethttp://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.36.tar.gz
cp mysql-connector-java-5.1.33-bin.jar apache-hive-1.2.1-bin/lib/
xii. Hive客户端配置
拷贝/etc/profile和hive到从机
修改hive-site.xml
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hadoop-master:9083</value>
</property>
</configuration>
xiii. Hive启动
hive --service metastore&
这个终端不能关闭
[hadoop@hadoop-master~]$jps
10288 RunJar #多了一个进程
9365 NameNode
9670 SecondaryNameNode
11096 Jps
9944 NodeManager
9838 ResourceManager
9471 DataNode
xiv. Hive服务器端访问
执行hive进入HIVE模式并创建hive数据库
创建测试文本test_20170120.txt
数据内容为:
why$99
zpp$100
将该文本文件上传到HDFS
创建分区外表
[root@Masterlocal]# hive -e "use fmrt;
> create external table hivetest(
> name string,
> age int
> )partitioned by(day_p string)
> row format delimited fields terminated by '$'
> STORED AS TEXTFILE;"
映射HDFS文件
alter table hivetest add partition(day_p='20170120') location '/data/20170120';
查询表
hive> select * from hivetest;
OK
why 99 20170120
zpp 100 20170120
Time taken: 0.105 seconds, Fetched: 2 row(s)
xv. Hive客户端访问
使用hive命令登录并查询
xvi. HIVE分区的使用
http://www.cnblogs.com/lovelanglangyou/p/5534296.html
一般使用分区外表
六、SPARKSQL部署
在spark/conf目录下创建hive-site.xml文件,内容如下:
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://Master.Hadoop:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
</configuration>
七、开发环境部署
PYTHON环境:
下载python3.5源码,安装前需要先安装这些库
yum install zlib-devel openssl-devel
否则安装的时候,pip3会无法安装
然后编译安装源码即可
https://www.zhihu.com/question/30279880这是出错的一些处理
最近特别迷jupyter,贼好用,远程访问的配置方法如下:
http://www.cnblogs.com/zhanglianbo/p/6109939.html
Scala环境:
建议使用SBT,具体步骤网上搜索,此处省略
八、集群监控
Hadoop监控页面
spark监控页面
具体监控页面上去多点点,多看看就行。
此处只是开个头,具体需要到网上再找文章深入学习
九、spark rdd
参考官网http://spark.apache.org/docs/latest/programming-guide.html,
不懂的地方再找中文更详细的例子
不需要一次性记住,多写写代码,自然就会记住一些常用的。
其他一些不用记住,熟悉即可,后续知道哪里去查就行
我写了一些使用的例子,设计到基本的算子操作,spark_sql操作等等
代码路径在Master /root/code:
Study.py
Spark python API需要一定的掌握 https://www.iteblog.com/archives/1395.html
孰能生巧,多写写代码
十、spark streaming
官网学习http://spark.apache.org/docs/latest/streaming-programming-guide.html,
然后部署flume和kafaka
Zookeeper集群配置
Kafka集群配置
使用python模拟kafka生产者传递数据
编写sparkstreaming 代码作为kafka接受者
这方面涉及很多概念,如果英文读起来吃力,可查找中文资料
我写了一个例子,代码在Master结点的/root/code下:
kafkaProducer.py userBehaviorMsgProducer.py webPagePopularityValueCalculator.py
spark实时处理的典型例子是日志系统,《基于FlumeKafkaSpark-的分布式日志流处理系统的设计与实现》对此有非常好的介绍;
高彦杰的《spark 大数据分析实践》里面有详细的配置和应用说明;
下面是知乎上的一些看法:
https://www.zhihu.com/question/36688175/answer/68692597
目前MASTER上的例子,我参考了如下内容进行部署和代码测试:
https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/
里面用的scala语言,我改成了python,语法参考如下:
http://blog.csdn.net/chuliuxiangjiao/article/details/46838545
里面用到了updateStateByKey原语,具体用法参考官网:
http://spark.apache.org/docs/latest/streaming-programming-guide.html
---------------------------------------------------我是分割线--------------------------------------------------
附:着重说明!!!!
Spark官网得全部看完
IBM developerWorks的文章很好,多搜搜
查看文献是提升能力的重要方式,我下载了部分文献可供参考
Spark自带的代码都需要看一遍,在MASTER上我改了很多内容
Spark 机器学习 MLLib放在《机器学习开发与应用》内一并介绍
SPARK GraphX 由于暂时不支持PYTHON,所以还未学习