当前位置:   article > 正文

分布式大数据集群搭建_集群数据库有哪些

集群数据库有哪些

一、大数据相关组件及概念

flume: 高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。

kafka:消息队列

Redis:内存数据库

zookeeper:大数据集群管理

hadoop:hdfs(分布式存储) mapreduce(分布式离线计算) yarn(资源调度管理)

  1. 存储模型:
  2. HDFS是一个主从(master/slaves)架构
  3. 由一个NameNode和一些DataNode组成
  4. 面向文件包含:文件数据(data)和文件元数据(metadata)
  5. NameNode负责存储和管理文件元数据,并维护一个层次型的文件目录树
  6. DataNode负责存储文件数据(block块),并提供block的读写
  7. DataNode与NameNode维持心跳,并汇报自己持有的block信息
  8. Client和NameNode交互文件元数据,和DataNode交互文件block数据
  9. 角色功能:
  10. NameNode:
  11. 完全基于内存存储文件元数据、目录结构、文件block的映射
  12. 需要持久化方案保证数据的可靠性
  13. 提供副本放置策略
  14. DataNode:
  15. 基于本地磁盘存储block(文件形式)
  16. 并保存block的校验和数据保证block的可靠性
  17. 与NameNone保持心跳,汇报block列表状态
  18. 基本语法命令:上传的文件存储在从节点DataNode存储路径下,主节点不会存储
  19. hadoop fs -mkdir /input # 创建文件夹
  20. hadoop fs -put 1.txt /input # 上传文件到文件系统
  21. hadoop fs -put /root/bak/hadoopbak/profile.db/user_action/ usr/hive/warehouse/profile.db/
  22. hadoop fs -rm -f /test # 删除文件
  23. hadoop fs -rm -r /testdir # 删除文件夹
  24. hadoop fs -ls / # 查看
  25. hadoop fs -get test /usr/local/hadoop # 将hadoop上test文件夹下载到本地/usr/local/hadoop
  26. hadoop fs -cat /input/word.txt # 查看文件内容

hive:SQL方式进行MapReduce计算(hive的存储引擎是hdfs;计算引擎是MapReduce),数据仓库(无法实时读写)

mysql:业务数据库,或存储hive元数据

hbase:数据库(实时&分布式&高维 数据库,面向列的数据存储,实时读取),big data 

sqoop:数据同步工具

spark:大数据计算引擎(spark core;spark streaming;spark sql;spark mllib)

  1. spark 由4类角色组成整个spark的运行时的环境:
  2. 资源管理层面:
  3. .管理者:Master(管理整个集群的资源;类比于YARN的ResouceManager)
  4. .工作中:Worker(管理单个服务器的资源;类比于YARN的NodeManager)
  5. 任务执行层:
  6. .某任务管理者:Driver(管理单个spark任务在运行的时候的工作;类比于YARN的ApplicationMaster)
  7. .某任务执行者:Executor(单个任务运行的时候的一堆工作者,干活的,类比于YARN的容器内运行的TASK)
  8. 注:正常情况下Executor是干活的角色,不过在特殊的场景下(Local模式)Driver可以即管理又干活
  9. spark 运行:
  10. bin目录下的可执行文件:
  11. 交互式解释器执行环境:
  12. ./pyspark --master local[*] # python方式启动本地模式
  13. ./spark-shell # scala方式启动
  14. 代码提交运行模式:
  15. ./spark-submit --master local[*] /usr/softwaretmp/bigdata/spark/spark/spark-2.4.0-bin-hadoop2.7/examples/src/main/python/pi.py 10 # 提交运行已编写好的代码文件
  16. 一个spark程序会被分成多个子任务(job)运行,每个job会分成多个阶段(state)来运行,每个state内会分出多个task(线程)来执行具体任务
  17. spark 算子:
  18. RDD算子:
  19. Transformation:转换算子
  20. map: rdd.map(func) 功能:map算子是将rdd数据一条条处理,返回新的rdd
  21. flatMap:rdd.flatMap(func) 功能:对rdd执行map操作,然后进行解除嵌套操作
  22. reduceByKey:rdd.reduceByKey(func) 功能:针对KV型RDD,自动按照key分组,然后根据提供的聚合逻辑,完成组内数据(value)的聚合操作
  23. mapValues:rdd.reduceByKey(func) 功能:针对二元元祖rdd,对其内部二元元祖的value执行map操作
  24. groupBy:rdd.groupBy(func) 功能:将rdd数据进行分组
  25. filter:rdd.filter(func) 功能:过滤想要的数据进行保留
  26. distinct:rdd.filter() 功能:对rdd数据进行去重,返回新rdd
  27. union:rdd.union(other_rdd) 功能:2个rdd合并成1个rdd返回
  28. join/leftOuterJoin/rightOuterJoin:rdd.join(other_rdd) 功能:对两个KV型rdd执行join/leftOuterJoin/rightOuterJoin操作
  29. intersection:rdd.intersection(other_rdd) 功能:求2个rdd的交集,返回一个新的rdd
  30. glom:rdd.glom() 功能:将rdd的数据按照分区加上嵌套
  31. groupByKey:rdd.groupByKey() 功能:针对KV型rdd,自动按照key分组
  32. sortBy:rdd.sortBy(func,ascending=False,numPartitions=1) 功能:对rdd数据基于指定的排序依据进行分区内排序(若全局有序,numPartitions设为1)
  33. sortByKey:rdd.sortByKey(ascending=False,numPartitions=1,keyfunc) 功能:针对KV型RDD,按照key进行排序(若全局有序,,numPartitions设为1)
  34. 分区操作算子:
  35. mapPartitions:rdd.map(func) 功能:和map类似,但是mapPartitions一次被传递的是一整个分区数据
  36. partitionBy:rdd.partitionBy(参数1:重新分区后有几个分区,参数2:自定义分区规则,函数传入) 功能:对rdd进行自定义分区操作
  37. repartition:rdd.repartition(N) 功能:对rdd的分区执行重新分区(仅数量)
  38. Action:动作(行动)算子
  39. countByKey:rdd.countByKey() 功能:统计key出现的次数(一般适用于KV型rdd)
  40. collect:rdd.collect() 功能:将rdd各个分区内的数据,统一收集到Driver中,形成一个List对象
  41. fold:rdd.fold(10,func) 功能:和reduce一样,接受传入逻辑进行聚合,聚合是带有初始值的。分区内聚合;分区间聚合
  42. first:rdd.first() 功能:取出rdd的第一个元素
  43. takeSample:rdd.takeSample(参数1True/False,参数2:采样数,参数3:随机数种子) 功能:随机抽样(有放回/不放回)rdd的数据
  44. takeOrdered:rdd.takeOrdered(参数1:要几个数据,参数2:排序时数据更改) 功能:对rdd进行排序取前N个
  45. foreach:rdd.foreach(func) 功能:对rdd的每个元素执行所提供的逻辑操作(和map一个意思),但是这个没有返回值
  46. saveAsTextFile:rdd.saveAsTextFile("/./.") 功能:将rdd数据写入文本文件中
  47. 分区操作算子:
  48. foreachPartition:rdd.foreachPartition(func) 功能:和普通foreach一致,一次处理的是一整个分区数据

flink:实时计算引擎(stateful stream processing;Datastream/Dataset API;Table API;Flink SQL)

  1. flink 集群角色:
  2. JobManager(JVM进程) master
  3. TaskManager(JVM进程) slave

anaconda:python变成环境

supervisor:python开发的进程管理工具

二、大数据安装及下载链接:

  1. apache-hive-2.1.1-bin.tar.gz :
  2. http://archive.apache.org/dist/hive/
  3. hadoop-2.7.3.tar.gz :
  4. http://archive.apache.org/dist/hadoop/common/
  5. hbase-1.2.4-bin.tar.gz :
  6. http://archive.apache.org/dist/hbase/
  7. jdk-8u171-linux-x64.tar.gz :
  8. https://www.oracle.com/java/technologies/downloads/
  9. mysql-connector-java-5.1.47-bin.jar :
  10. https://dev.mysql.com/downloads/
  11. scala-2.11.12.tgz :
  12. https://www.scala-lang.org/download/2.11.12.html
  13. spark-2.4.0-bin-hadoop2.7.tgz :
  14. http://archive.apache.org/dist/spark/
  15. sqoop-1.4.7.bin.tar.gz :
  16. http://archive.apache.org/dist/sqoop/
  17. zookeeper-3.4.10.tar.gz :
  18. https://archive.apache.org/dist/zookeeper/
  19. apache-flume-1.8.0-bin.tar.gz :
  20. http://archive.apache.org/dist/flume/
  21. redis :
  22. https://redis.io/download/
  23. Anaconda3-2021.05-Linux-x86_64.sh :
  24. https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D

三、部分相关说明

3.1、账号 & 密码 说明:

  1. 虚拟机:
  2. node01 主节点:
  3. 用户名:root 密码:root
  4. 用户名:itcast 密码:!QAZ@WSX3edc
  5. node02 从节点:
  6. 用户名:root 密码:root
  7. 用户名:itcast 密码:!QAZ@WSX3edc
  8. node03 从节点:
  9. 用户名:root 密码:root
  10. 用户名:itcast 密码:!QAZ@WSX3edc
  11. mysql数据库:
  12. 用户名:root 密码:123456

3.2、Web端口说明

  1. hdfs远程连接namenode端口:9000 hdfs://node01:9000/input/word.txt
  2. namenode的webUI端口:50070
  3. yarn的web端口:http://192.168.52.66:18088
  4. yarn集群子任务端口:http://192.168.52.66:4040
  5. spark集群的web端口:8080
  6. spark-job监控端口:4040

四、分布式集群安装

4.1、虚拟机安装

        虚拟机安装位置:

                D:\bigdata\Virtual Machines\node01

        创建虚拟机:

                创建新的虚拟机->自定义(高级)->下一步->稍后安装操作系统->Linux CentOS64->修改名称和位置->处理器配置->内存配置->网络连接(NAT)->下一步->下一步->创建新虚拟磁盘->最大磁盘大小->下一步->完成

        安装操作系统:

                安装centOS 7步骤:

                        CD/DVD(IDE)->导入镜像->开启此虚拟机->Install CentOS 7->选择语言(中文)->安装位置(直接点确定)/软件选择(带GUI的服务器)/网络和主机名(设置主机名,打开网络)->开始安装->ROOT密码(root)->重启->接受许可证->选择语言(前进)->选择时区(上海)->跳过->设置用户和密码->开始使用

                配置虚拟机网络服务:

  1. cd /etc/sysconfig/network-scripts/
  2. vim ifcfg-ens33
  3. '''
  4. DEVICE=ens33
  5. TYPE=Ethernet
  6. ONBOOT=yes
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=static
  9. IPADDR=192.168.52.66
  10. NETMASK=255.255.255.0
  11. GATEWAY=192.168.52.2
  12. DNS1=144.144.144.144
  13. DNS2=192.168.52.2
  14. '''
  15. service network restart # 重启网卡服务
  16. ping www.baidu.com # ping外网测试

                基于虚拟机快照克隆多台虚拟机:(克隆两台从节点node02、node03)

                        右击节点(node01)->快照->快照管理器->拍摄快照->起名(base)->拍摄快照

                        右击节点(node01)->管理->克隆->下一步->现有快照(base)->创建链接克隆->修改虚拟机名称(node02)和路径->完成->关闭

                        开机,修改配置信息:

  1. cd /etc/sysconfig/network-scripts/
  2. vim ifcfg-ens33
  3. '''
  4. DEVICE=ens33
  5. TYPE=Ethernet
  6. ONBOOT=yes
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=static
  9. IPADDR=192.168.52.67
  10. NETMASK=255.255.255.0
  11. GATEWAY=192.168.52.2
  12. DNS1=144.144.144.144
  13. DNS2=192.168.52.2
  14. '''
  15. vim /etc/hostname # 修改主机名称
  16. '''
  17. node02
  18. '''
  19. cat /etc/udev/rules.d/70-persistent-ipoib.rules
  20. rm -f /etc/udev/rules.d/70-persistent-net.rules # 删除原网络物理地址生成文件
  21. reboot # 重启
  22. ifconfig # 查看ip
  23. ping www.baidu.com # ping外网测试

                配置修改yum源(国内源):

                        修改配置文件:

  1. cd /etc/yum.repos.d/
  2. ls
  3. mkdir back
  4. mv CentOS-Base.repo back/
  5. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 阿里云官网
  6. ls
  7. yum clean all # 清空本地依赖缓存
  8. yum makecache # 将依赖缓存下载到本地:

4.2、服务器基础环境配置

        服务器说明:三台服务器,一台主节点(node01),两台从节点(node02,node03);

        防火墙关闭(三个节点):

  1. systemctl stop firewalld.service # 防火墙暂时停止
  2. systemctl disable firewalld.service # 防火墙永久关闭
  3. systemctl status firewalld # 查看防火墙状态

        主机host映射(三个节点):

  1. vim /etc/hosts # 编辑/etc/hosts文件,插入下面内容
  2. '''
  3. 192.168.52.66 node01
  4. 192.168.52.67 node02
  5. 192.168.52.68 node03
  6. '''

        ssh配置免密登录(三个节点):

                节点各自免密等:(三个节点)

  1. ssh-keygen # 生成认证秘钥
  2. cd /root/.ssh/
  3. ls
  4. cat id_rsa.pub >> authorized_keys # 内容重定向到授权文件里
  5. chmod 600 authorized_keys # 设置权限600
  6. ssh localhost # 测试是否设置成功
  7. exit # 退出

                主节点 -> 从节点 免密 设置:

                        从节点:node02,node03

  1. scp node01:/root/.ssh/id_rsa.pub /root # 把主节点秘钥拷贝到从节点下
  2. ls /root/ # 查看
  3. cat /root/id_rsa.pub >> authorized_keys # 重定向到授权文件里

                        主节点测试:在主节点下输入

  1. ssh node02 # 免密登录node02
  2. ssh node03
  3. exit # 退出

                 从节点 -> 主节点 免密 设置:

                        主节点:node01

  1. scp node02:/root/.ssh/id_rsa.pub /root
  2. cat /root/id_rsa.pub >> authorized_keys
  3. scp node03:/root/.ssh/id_rsa.pub /root
  4. cat /root/id_rsa.pub >> authorized_keys

                        从节点测试:在从节点上输入

  1. ssh node01 # 免密登录主节点
  2. exit # 退出

        时间同步协议和定时任务:

                设置时区:三个节点

  1. tzselect
  2. 5 # 亚洲
  3. 9 # 中国
  4. 1 # 北京
  5. 1 # 确定

                安装ntp服务:三个节点

  1. yum install ntp
  2. rpm -qa | grep ntp # 检验是否安装成功
  3. service ntpd status # 查看状态,不要让他自动启动
  4. service ntpd stop # 服务停止
  5. systemctl enable ntpd.service #设置开机自启

                设置配置文件,使主节点同步其自身:主节点

  1. vim /etc/ntp.conf # 修改配置文件,添加下面内容
  2. '''
  3. server 127.127.1.0 # local clock
  4. fudge 127.127.1.0 stratum 10
  5. # 注释文件中server开头的行内容
  6. '''
  7. /bin/systemctl restart ntpd.service # 重启ntp服务
  8. service ntpd status # 查看状态
  9. date & ssh node02 "date" & ssh node03 "date" # 查看各个节点时间

                手动将从节点时区与主节点同步:在从节点输入(两个)

  1. ntpdate node01
  2. # 编写定时任务:
  3. crontab -e
  4. '''
  5. */1 * * * * /usr/sbin/ntpdate node01
  6. '''

4.3、JDK环境配置:

        # yum install java  # 直接下载安装java,环境变量也配置好,不建议这么安装

        主节点上提前上传下载好的解压缩包,放到对应目录

  1. cd usr/softwaretmp/bigdata/
  2. mkdir java # 创建安装目录
  3. mv jdk-8u171-linux-x64.tar.gz ../java/ # 移动压缩包到对应安装目录下
  4. cd ../java/
  5. tar -zxvf jdk-8u171-linux-x64.tar.gz # 解压缩安装包
  6. scp -r jdk1.8.0_171/ node02:/usr/softwaretmp/bigdata/java # 把主节点安装好的java文件夹拷贝到从节点相应目录下
  7. scp -r jdk1.8.0_171/ node03:/usr/softwaretmp/bigdata/java
  8. # tar -zcvf jdk1.8.0_171.tar.gz jdk1.8.0_171 # 把jdk1.8.0_171文件夹下的内容压缩成jdk1.8.0_171.tar.gz压缩包

        主从节点修改环境变量配置

  1. vim /etc/profile # 修改环境变量
  2. '''
  3. # set java environment
  4. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171
  5. export CLASSPATH=$JAVA_HOME/lib/
  6. export PATH=$PATH:$JAVA_HOME/bin
  7. export PATH JAVA_HOME CLASSPATH
  8. '''
  9. source /etc/profile # 使环境变量生效

        主从节点验证

java -version

4.4、zookeeper集群搭建:

        主节点安装、配置zookeeper:主节点

  1. cd usr/softwaretmp/bigdata/
  2. mv zookeeper-3.4.10.tar.gz ../zookeeper/
  3. cd ../zookeeper/
  4. tar -zxvf zookeeper-3.4.10.tar.gz

                新建数据和日志文件

  1. cd /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10
  2. mkdir zkdata
  3. mkdir zkdatalog

                配置文件zoo.cfg : 主节点配置

  1. cd /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/conf/ # 进入配置文件夹
  2. mv zoo_sample.cfg zoo.cfg # 拷贝配置文件,zookeeper启动时会找到这个文件作为默认配置文件
  3. vim zoo.cfg
  4. '''
  5. tickTime=2000
  6. initLimit=10
  7. syncLimit=5
  8. dataDir=/usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/zkdata
  9. clientPort=2181
  10. dataLogDir=/usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/zkdatalog
  11. server.1=node01:2888:3888
  12. server.2=node02:2888:3888
  13. server.3=node03:2888:3888
  14. '''

                创建并配置文件myid:主从节点(集群中配置node01为1号服务器,node02为2号服务器,node03为3号服务器)

  1. cd /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/zkdata
  2. vim myid
  3. '''
  4. 1 # 主节点,对应zoo.cfg文件里的server.x的x
  5. '''

                主节点远程复制分发安装文件到从节点:

  1. scp -r /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10 root@node02:/usr/softwaretmp/bigdata/zookeeper/
  2. scp -r /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10 root@node03:/usr/softwaretmp/bigdata/zookeeper/

        从节点修改相关配置:从节点

  1. cd /usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/zkdata
  2. vim myid
  3. '''
  4. 2 # node02对应的myid
  5. # 3 # node03对应的myid
  6. '''

        修改配置文件,配置zookeeper环境变量:主从节点(三台)

  1. vim /etc/profile
  2. '''
  3. # set zookeeper environment
  4. export ZOOKEEPER_HOME=/usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10
  5. PATH=$PATH:$ZOOKEEPER_HOME/bin
  6. '''
  7. source /etc/profile # 是环境变量生效

        zookeeper目录下启动zookeeper集群:主从节点(三台)

  1. cd ..
  2. bin/zkServer.sh start
  3. bin/zkServer.sh status # 查看状态

4.5、Hadoop集群搭建

        主节点安装配置hadoop:主节点

                创建安装目录,并解压文件

  1. cd /usr/softwaretmp/bigdata/
  2. mkdir hadoop
  3. mv hadoop-2.7.3.tar.gz ../hadoop/
  4. cd ../hadoop/
  5. tar -zxvf hadoop-2.7.3.tar.gz

                配置hadoop各组件

                        1、进入hadoop配置目录,编辑hadoop-env.sh环境配置文件

  1. cd $HADOOP_HOME/etc/hadoop
  2. echo $JAVA_HOME # 可查看java目录
  3. vim hadoop-env.sh
  4. '''
  5. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171 # 修改java环境变量
  6. '''

                        2、编辑core-site.xml文件

  1. vim core-site.xml
  2. '''
  3. <configuration>
  4. <property>
  5. <name>fs.default.name</name>
  6. <value>hdfs://node01:9000</value>
  7. </property>
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/hdfs/tmp</value>
  11. <description>A base for other temporary directories.</description>
  12. </property>
  13. <property>
  14. <name>io.file.buffer.size</name>
  15. <value>131072</value>
  16. </property>
  17. <property>
  18. <name>fs.checkpoint.period</name>
  19. <value>60</value>
  20. </property>
  21. <property>
  22. <name>fs.checkpoint.size</name>
  23. <value>67108864</value>
  24. </property>
  25. </configuration>
  26. '''

                        3、创建、编辑mapred-site.xml文件 

  1. cp mapred-site.xml.template mapred-site.xml
  2. vim mapred-site.xml
  3. '''
  4. <configuration>
  5. <property>
  6. <!--指定MapReduce运行在yurn上-->
  7. <name>mapreduce.framework.name</name>
  8. <value>yarn</value>
  9. </property>
  10. </configuration>
  11. '''

                        4、修改yarn-site.xml

  1. vim yarn-site.xml
  2. '''
  3. <configuration>
  4. <!--指定ResourceManager的地址-->
  5. <property>
  6. <name>yarn.resourcemanager.address</name>
  7. <value>node01:18040</value>
  8. </property>
  9. <property>
  10. <name>yarn.resourcemanager.scheduler.address</name>
  11. <value>node01:18030</value>
  12. </property>
  13. <property>
  14. <name>yarn.resourcemanager.webapp.address</name>
  15. <value>node01:18088</value>
  16. </property>
  17. <property>
  18. <name>yarn.resourcemanager.resource-tracker.address</name>
  19. <value>node01:18025</value>
  20. </property>
  21. <property>
  22. <name>yarn.resourcemanager.admin.address</name>
  23. <value>node01:18141</value>
  24. </property>
  25. <!--指定reducer获取数据的方式-->
  26. <property>
  27. <name>yarn.nodemanager.aux-services</name>
  28. <value>mapreduce_shuffle</value>
  29. </property>
  30. <property>
  31. <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
  32. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  33. </property>
  34. <!--新增内容:yarn扩容尝试-->
  35. <property>
  36. <name>yarn.nodemanager.vmem-check-enabled</name>
  37. <value>false</value>
  38. <description>Whether virtual memory limits will be enforced for containers.</description>
  39. </property>
  40. <!--site specific YARN configuration properties-->
  41. </configuration>
  42. '''

                        5、编辑hdfs-site.xml配置文件:

  1. vim hdfs-site.xml
  2. '''
  3. <configuration>
  4. <property>
  5. <!--数据块副本备份的数量,默认是3-->
  6. <name>dfs.replication</name>
  7. <value>2</value>
  8. </property>
  9. <property>
  10. <!--namenode在本地文件系统中持久化存储命名空间和事务日志的路径-->
  11. <name>dfs.namenode.name.dir</name>
  12. <value>file:/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/hdfs/name</value>
  13. <final>true</final>
  14. </property>
  15. <property>
  16. <!--DataNode在本地文件系统中存放块的路径-->
  17. <name>dfs.datanode.data.dir</name>
  18. <value>file:/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/hdfs/data</value>
  19. <final>true</final>
  20. </property>
  21. <property>
  22. <name>dfs.namenode.http-address</name>
  23. <value>node01:50070</value>
  24. </property>
  25. <property>
  26. <name>dfs.namenode.secondary.http-address</name>
  27. <value>node01:9001</value>
  28. </property>
  29. <property>
  30. <name>dfs.webhdfs.enabled</name>
  31. <value>true</value>
  32. </property>
  33. <property>
  34. <name>dfs.permissions</name>
  35. <value>false</value>
  36. </property>
  37. </configuration>
  38. '''

                        6、编写slaves文件,添加子节点slave1和slave2;编写master文件,添加主节点master

  1. vim slaves
  2. '''
  3. node02
  4. node03
  5. '''
  6. vim master
  7. '''
  8. node01
  9. '''

                主节点分发hadoop文件到node02、node02两个子节点:

  1. scp -r /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3 root@node02:/usr/softwaretmp/bigdata/hadoop/
  2. scp -r /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3 root@node03:/usr/softwaretmp/bigdata/hadoop/

        添加环境变量:主从节点(三台机器)

  1. vim /etc/profile
  2. '''
  3. # set HADOOP environment
  4. export HADOOP_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3
  5. export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
  6. export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
  7. '''
  8. source /etc/profile

        在master中格式化hadoop,开启hadoop:主节点(仅在node01中操作)

hadoop namenode -format # 格式化namenode

        主节点开启hadoop集群:主节点(仅在node01主机上开启操作命令,它会带起从节点启动)

  1. cd /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3 # 回到hadoop目录
  2. sbin/start-all.sh # 主节点开启服务
  3. jps # 查看进程
  4. 打开网址查看 :http://192.168.52.66:50070

4.6、Hbase集群搭建:

        主节点安装配置Hbase:主节点

                创建安装目录,并解压文件

  1. cd /usr/softwaretmp/bigdata/
  2. mkdir /hbase/
  3. tar -zxvf hbase-1.2.4-bin.tar.gz
  4. rm -rf /usr/hbase/hbase-1.2.4-bin.tar.gz # 删除压缩包

                 进入hbase配置目录conf,修改配置文件hbase-env.sh,添加配置变量:

  1. cd /usr/softwaretmp/bigdata/hbase/hbase-1.2.4/conf
  2. vim hbase-env.sh
  3. '''
  4. export HBASE_MANAGES_ZK=false # 关闭自带的zookeeper集群
  5. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171
  6. export HBASE_CLASSPATH=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop
  7. '''

                配置conf/hbase-site.xml

  1. vim hbase-site.xml
  2. '''
  3. <configuration>
  4. <property>
  5. <name>hbase.rootdir</name>
  6. <value>hdfs://node01:9000/hbase</value>
  7. </property>
  8. <property>
  9. <name>hbase.cluster.distributed</name>
  10. <value>true</value>
  11. </property>
  12. <property>
  13. <name>hbase.master</name>
  14. <value>hdfs://node01:6000</value>
  15. </property>
  16. <property>
  17. <name>hbase.zookeeper.quorum</name>
  18. <value>node01,node02,node03</value>
  19. </property>
  20. <property>
  21. <name>hbase.zookeeper.property.dataDir</name>
  22. <value>/usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10</value>
  23. </property>
  24. </configuration>
  25. '''

                配置 conf/regionservers

  1. vim regionservers
  2. '''
  3. node02
  4. node03
  5. '''

                hadoop配置文件拷入hbase的目录下

  1. cd /usr/softwaretmp/bigdata/hbase/hbase-1.2.4/conf
  2. cp /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop/hdfs-site.xml .
  3. cp /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml .

                分发主节点hbase到子节点

  1. scp -r /usr/softwaretmp/bigdata/hbase/hbase-1.2.4 root@node02:/usr/softwaretmp/bigdata/hbase/
  2. scp -r /usr/softwaretmp/bigdata/hbase/hbase-1.2.4 root@node03:/usr/softwaretmp/bigdata/hbase/

        配置环境变量:主从节点(三台)

  1. vim /etc/profile
  2. '''
  3. # set hbase environment
  4. export HBASE_HOME=/usr/softwaretmp/bigdata/hbase/hbase-1.2.4
  5. export PATH=$PATH:$HBASE_HOME/bin
  6. '''
  7. source /etc/profile

        运行和测试:在主节点node01上执行(保证hadoop和zookeeper已开启)

  1. bin/start-hbase.sh
  2. jps
  3. 网页输入:ip:16010

4.7、HIVE数据仓库搭建

        在子节点node03上安装mysql:

                1、配置本地源,安装mysql server

  1. cd /usr/local/src/
  2. wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
  3. yum -y localinstall mysql57-community-release-el7-8.noarch.rpm
  4. yum -y install mysql-community-server
  5. yum -y install mysql-server
  6. 如果报秘钥错误的解决办法:
  7. vim /etc/yum.repos.d/mysql-community.repo
  8. # 修改对应安装版本的gpgcheck=0即可,默认值为1
  9. '''
  10. [mysql57-community]
  11. name=MySQL 5.7 Community Server
  12. baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
  13. enabled=1
  14. gpgcheck=0
  15. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
  16. '''

                2、启动服务

  1. systemctl daemon-reload # 重载所有修改过的配置文件
  2. systemctl start mysqld # 开启服务
  3. systemctl enable mysqld # 开机自启

                3、获取安装后自动生成的随机密码,用于登录MySQL数据库

  1. grep "temporary password" /var/log/mysqld.log # 获取初始密码
  2. mysql -u root -p # 登录mysql

                4、mysql密码安全策略设置

  1. set global validate_password_policy=0; # 设置密码强度为低级
  2. set global validate_password_length=4; # 设置密码长度
  3. alter user 'root'@'localhost' identified by '123456'; # 修改本地密码
  4. \q # 退出

                5、设置远程登录

  1. mysql -u root -p 123456 # 以新密码登录mysql
  2. create user 'root'@'%' identified by '123456'; # 创建用户
  3. grant all privileges on *.* to 'root'@'%' with grant option; # 允许远程连接
  4. flush privileges; # 刷新权限
  5. chkconfig mysqld on # 将mysql的服务注册为开机启动

                6、创建数据库test

  1. create database test;
  2. show databases;

        主节点(node01)中创建工作路径,解压安装包:node01作为客户端,node02作为服务器端,因为node01和node02节点都需要hive

  1. cd /usr/softwaretmp/bigdata/
  2. mkdir /hive/
  3. tar -zxvf apache-hive-2.1.1-bin.tar.gz
  4. scp -r /usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin root@node02:/usr/softwaretmp/bigdata/hive/ # node01中将hive远程复制到node02中

        修改配置文件,添加hive环境变量:主从节点(node01和node02节点)

  1. vim /etc/profile
  2. '''
  3. # set hive environment
  4. export HIVE_HOME=/usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin
  5. export PATH=$PATH:$HIVE_HOME/bin
  6. '''
  7. source /etc/profile

        解决版本冲突和jar包依赖问题

                客户端需要和hadoop通信,所以从hive的lib包中拷贝较高版本jline jar包到hadoop中lib位置:node01中执行

cp /usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar /usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/share/hadoop/yarn/lib/

                服务器需要和mysql通信,所以服务器需要将mysql的依赖包放到hive的lib目录下:node02中进行

  1. cd /usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/lib
  2. # 已下载,直接远程复制进去
  3. # wget http://10.10.88.2:8000/bigdata/bigdata_tar/mysql-connection-java-5.1.47-bin.jar

        node02作为服务器端配置hive: node02节点

  1. cd $HIVE_HOME/conf
  2. cp hive-env.sh.template hive-env.sh
  3. vim hive-env.sh
  4. '''
  5. HADOOP_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3
  6. export HIVE_CONF_DIR=/usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/conf
  7. '''
  8. vim hive-site.xml
  9. '''
  10. <configuration>
  11. <!--HIVE产生的数据存放位置-->
  12. <property>
  13. <name>hive.metastore.warehouse.dir</name>
  14. <value>/usr/softwaretmp/bigdata/hive_remote/warehouse</value>
  15. </property>
  16. <!--数据库连接JDBC的URL地址-->
  17. <property>
  18. <name>javax.jdo.option.ConnectionURL</name>
  19. <value>jdbc:mysql://node03:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
  20. </property>
  21. <!--数据库连接driver,即MySQL驱动-->
  22. <property>
  23. <name>javax.jdo.option.ConnectionDriverName</name>
  24. <value>com.mysql.jdbc.Driver</value>
  25. </property>
  26. <!--MySQL数据库用户名-->
  27. <property>
  28. <name>javax.jdo.option.ConnectionUserName</name>
  29. <value>root</value>
  30. </property>
  31. <!--MySQL数据库密码-->
  32. <property>
  33. <name>javax.jdo.option.ConnectionPassword</name>
  34. <value>123456</value>
  35. </property>
  36. <property>
  37. <name>hive.metastore.schema.verification</name>
  38. <value>false</value>
  39. </property>
  40. <property>
  41. <name>datanucleus.schema.autoCreateAll</name>
  42. <value>true</value>
  43. </property>
  44. </configuration>
  45. '''

        node01作为客户端配置hive:主节点node01

  1. cd /usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/conf/
  2. vim hive-site.xml
  3. '''
  4. <configuration>
  5. <!--HIVE产生的元数据存放位置-->
  6. <property>
  7. <name>hive.metastore.warehouse.dir</name>
  8. <value>/usr/softwaretmp/bigdata/hive_remote/warehouse</value>
  9. </property>
  10. <!--使用本地服务连接HIVE,默认为true-->
  11. <property>
  12. <name>hive.metastore.local</name>
  13. <value>false</value>
  14. </property>
  15. <!--连接服务器-->
  16. <property>
  17. <name>hive.metastore.uris</name>
  18. <value>thrift://node02:9083</value>
  19. </property>
  20. </configuration>
  21. '''
  22. cp hive-env.sh.template hive-env.sh
  23. vim hive-env.sh
  24. '''
  25. HADOOP_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3
  26. export HIVE_CONF_DIR=/usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/conf

        启动hive

cd /usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin

                1、启动hive server服务:node02节点

bin/hive --service metastore

                2、启动hive client:node01节点

bin/hive

                3、测试hive是否启动成功

  1. show databases;
  2. create database hive_db;
  3. exit; # 退出

                4、查看master进程

jps

4.8、sqoop安装:只需在master节点安装

  1. cd /usr/softwaretmp/bigdata/sqoop
  2. tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

        配置环境变量:

  1. vim /etc/profile
  2. '''
  3. # set sqoop environment
  4. export SQOOP_HOME=/usr/softwaretmp/bigdata/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0/
  5. export PATH=$SQOOP_HOME/bin:$PATH
  6. '''
  7. source /etc/profile

        修改配置文件:

  1. cd /usr/softwaretmp/bigdata/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0/conf
  2. cp sqoop-env-template.sh sqoop-env.sh
  3. vim sqoop-env.sh
  4. '''
  5. export HADOOP_COMMON_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/
  6. export HADOOP_MAPRED_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/
  7. export HBASE_HOME=/usr/softwaretmp/bigdata/hbase/hbase-1.2.4/
  8. export HIVE_HOME=/usr/softwaretmp/bigdata/hive/apache-hive-2.1.1-bin/
  9. export ZOOCFGDIR=/usr/softwaretmp/bigdata/zookeeper/zookeeper-3.4.10/conf
  10. '''

        mysql的jar放到sqoop的lib目录下(mysql-connector-java-5.1.35-bin.jar)

把mysql-connector-java-5.1.47-bin.jar拖到/usr/softwaretmp/bigdata/sqoop/sqoop-1.4.7.bin__hadoop-2.6.0/lib/

        验证配置是否成功:

  1. bin/sqoop help
  2. bin/sqoop list-databases --connect jdbc:mysql://node03:3306/ --username root --password 123456

                数据同步实例代码

  1. # mysql -> hive 全量同步数据
  2. bin/sqoop import --connect jdbc:mysql://node03:3306/toutiao --username root --password 123456
  3. --table user_profile --m 5 --hive-home /root/bigdata/hive --hive-import
  4. --create-hive-table --hive-drop-import-delims --warehouse-dir /usr/hive/warehouse/toutiao.db
  5. --hive-table toutiao.user_profile
  6. # mysql -> hive 增量导入
  7. bin/sqoop import --connect jdbc:mysql://node03:3306/toutiao --username root --password 123456
  8. --table user_profile --m 5 --target-dir /usr/hive/warehouse/toutiao.db/user_profile
  9. --incremental lastmodified --check-column update_time
  10. --merge-key user_id --last-value 'date +"%Y-%m-%d" -d "-1day"'
  11. bin/sqoop import --connect jdbc:mysql://node03:3306/toutiao --username root --password 123456
  12. --table user_profile --m 5
  13. --query 'select article_id, user_id, channel_id, REPLACE(REPLACE(REPLACE(title, CHAR(13),""),CHAR((10),""),","," ") title,status,update_time from news_article_basic where $CONDITIONS'
  14. --split-by user_id
  15. --target-dir /usr/hive/warehouse/toutiao.db/user_profile
  16. --incremental lastmodified --check-column update_time
  17. --merge-key user_id --last-value 'date +"%Y-%m-%d" -d "-1day"'

4.9、flume安装:node01

  1. cd /usr/softwaretmp/bigdata/flume
  2. tar -zxvf apache-flume-1.8.0-bin.tar.gz

        配置环境变量:

  1. vim /etc/profile
  2. '''
  3. # set flume environment
  4. export FLUME_HOME=/usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin
  5. export FLUME_CONF_DIR=$FLUME_HOME/conf
  6. export PATH=$FLUME_HOME/bin:$PATH
  7. '''
  8. source /etc/profile

        修改配置文件flume-env.sh:

  1. cd flume/apache-flume-1.8.0-bin/conf
  2. cp flume-env.sh.template flume-env.sh
  3. vim flume-env.sh
  4. '''
  5. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171
  6. '''

        创建配置文件slave.conf:

  1. touch slave.conf
  2. vim slave.conf
  3. '''
  4. a1.sources = r1
  5. a1.sinks = k1
  6. a1.channels = c1
  7. #具体定义source
  8. a1.sources.r1.type = spooldir
  9. # 创建此目录,保证里面空的
  10. a1.sources.r1.spoolDir = /usr/softwaretmp/bigdata/flume/logs
  11. #对于sink的配置描述 使用avro(输出到agent)日志做数据的消费
  12. a1.sinks.k1.type = avro
  13. # hostname是最终传给master节点的位置
  14. a1.sinks.k1.hostname = node01
  15. a1.sinks.k1.port = 44444#端口号
  16. #对于channel的配置描述 使用文件做数据的临时缓存 创建一个检查点的位置用于临时缓存提高安全性
  17. a1.channels.c1.type = file
  18. a1.channels.c1.checkpointDir = /usr/softwaretmp/bigdata/flume/checkpoint
  19. a1.channels.c1.dataDirs = /usr/softwaretmp/bigdata/flume/data
  20. #通过channel c1将source r1和sink k1关联起来
  21. a1.sources.r1.channels = c1
  22. a1.sinks.k1.channel = c1
  23. '''

        创建文件目录:

  1. cd /usr/softwaretmp/bigdata/flume
  2. mkdir logs # 创建监听的日志文件目录
  3. mkdir checkpoint # 创建缓存目录checkpoint
  4. mkdir data # 创建缓存目录

        配置用户属性环境变量:

  1. vi ~/.bash_profile
  2. '''
  3. #flume
  4. export FLUME_HOME=/usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin
  5. export PATH=$PATH:$FLUME_HOME/bin
  6. '''
  7. source ~/.bash_profile

        查看是否配置成功:

  1. flume-ng version
  2. # 若出现 错误: 找不到或无法加载主类 org.apache.flume.tools.GetJavaProperty
  3. 解决方法:找到下面这段,在最后添加 2>/dev/null | grep hbase 即可
  4. vim bin/flume-ng
  5. '''
  6. local HBASE_CLASSPATH=""
  7. ......
  8. java.library.path 2>/dev/null | grep hbase)
  9. '''

        配置好的flume分发到从节点(node02,node03):

  1. scp -r /usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin/ root@node02:/usr/softwaretmp/bigdata/flume/
  2. scp -r /usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin/ root@node03:/usr/softwaretmp/bigdata/flume/

                创建文件目录:node02,node03

  1. cd /usr/softwaretmp/bigdata/flume
  2. mkdir logs # 创建监听的日志文件目录
  3. mkdir checkpoint # 创建缓存目录checkpoint
  4. mkdir data # 创建缓存目录

        master节点创建master.conf文件:node01

  1. cd /usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin/conf
  2. touch master.conf
  3. vim master.conf # 从节点上的数据,聚合起来,传到hdfs上面
  4. '''
  5. a1.sources = r1
  6. a1.sinks = k1
  7. a1.channels = c1
  8. # 对于source的配置描述 监听avro
  9. a1.sources.r1.type = avro
  10. # 传入的主机名和端口号
  11. a1.sources.r1.bind = node01
  12. a1.sources.r1.port = 44444
  13. #定义拦截器,为消息添加时间戳
  14. a1.sources.r1.interceptors = i1
  15. a1.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
  16. #对于sink的配置描述 传递到hdfs上面
  17. a1.sinks.k1.type = hdfs
  18. #设置master的hdfs路径地址
  19. a1.sinks.k1.hdfs.path = hdfs://node01:9000/flume/%Y%m%d
  20. a1.sinks.k1.hdfs.filePrefix = events-
  21. a1.sinks.k1.hdfs.fileType = DataStream
  22. #不按照条数生成文件
  23. a1.sinks.k1.hdfs.rollCount = 0
  24. #HDFS上的文件达到128M时生成一个文件
  25. a1.sinks.k1.hdfs.rollSize = 134217728
  26. #HDFS上的文件达到60秒生成一个文件
  27. a1.sinks.k1.hdfs.rollInterval = 60
  28. #对于channel的配置描述 使用内存缓冲区域做数据的临时缓存
  29. a1.channels.c1.type = memory
  30. a1.channels.c1.capacity = 1000
  31. a1.channels.c1.transactionCapacity = 100
  32. #通过channel c1将source r1和sink k1关联起来
  33. a1.sources.r1.channels = c1
  34. a1.sinks.k1.channel = c1
  35. '''

               上面的配置文件中 agent1.sinks.sink1.hdfs.path=hdfs://node01:9000/flume下,即将监听到的文件自动上传到hdfs的/flume下,所以要手动创建hdfs下的目录

hdfs dfs -mkdir /flume

                先看下hdfs的logs目录下,目前什么都没有

hdfs dfs -ls -R /flume

        运行测试:

                启动服务:主节点(node01)启动

flume-ng agent -n a1 -c conf -f /usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin/conf/master.conf -Dflume.root.logger=INFO,console

                从节点启动:node02,node03

bin/flume-ng agent -n a1 -c conf -f /usr/softwaretmp/bigdata/flume/apache-flume-1.8.0-bin/conf/slave.conf -Dflume.root.logger=INFO,console

                从节点创建日志数据文件:node02,node03

  1. cd /usr/softwaretmp/bigdata/flume/logs
  2. vim flume_test.txt
  3. '''
  4. {"actionTime":"2019-04-10 18:15:35","readTime":"","channelId":0,"param":{"action":"exposure","userId":"2","articleId":"[18577,14299]","algorithmCombine":"C2"}}
  5. {"actionTime":"2019-04-10 18:12:11","readTime":"2886","channelId":18,"param":{"action":"read","userId":"2","articleId":"18005","algorithmCombine":"C2"}}
  6. {"actionTime":"2019-04-10 18:15:32","readTime":"","channelId":18,"param":{"action":"click","userId":"2","articleId":"18005","algorithmCombine":"C2"}}
  7. '''

                往flume_test.txt文件插入数据:

  1. echo {"actionTime":"2019-04-10 18:15:32","readTime":"","channelId":18,"param":{"action":"click","userId":"2","articleId":"18005","algorithmCombine":"C2"}} >> flume_test.txt
  2. tail -f collect.log # 查看正在改变的log文件

                然后发现hdfs的flume下自动上传了刚刚创建的文件

  1. hdfs dfs -ls -R /flume
  2. hdfs dfs -cat /flume/20220418/events-.1650292569824

                客户端查看

http://node01:50070/explorer.html#

                查看开启的flume进程

ps aux | grep flume

4.10、spark集群搭建:

        安装scala环境:

                主节点安装配置scala:node01

  1. cd /usr/softwaretmp/bigdata/
  2. mkdir scala
  3. tar -zxvf scala-2.11.12.tgz
  4. rm -rf /usr/softwaretmp/bigdata/scala/scala-2.11.12.tgz

                配置scala环境变量并生效:主从节点(node01,node02,node03)

  1. vim /etc/profile
  2. '''
  3. # set scala environment
  4. export SCALA_HOME=/usr/softwaretmp/bigdata/scala/scala-2.11.12
  5. export PATH=$SCALA_HOME/bin:$PATH
  6. '''
  7. source /etc/profile

                查看是否安装成功:主节点(node01)

scala -version

                复制到子节点:主节点(node01)

  1. scp -r /usr/softwaretmp/bigdata/scala/scala-2.11.12 root@node02:/usr/softwaretmp/bigdata/scala/
  2. scp -r /usr/softwaretmp/bigdata/scala/scala-2.11.12 root@node03:/usr/softwaretmp/bigdata/scala/

        安装spark

                主节点安装配置scala:主节点(node01)

  1. cd /usr/softwaretmp/bigdata/
  2. mkdir spark
  3. tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz
  4. rm -rf /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7.tgz

                修改配置文件spark-env.sh:主节点(node01)

  1. cd /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/conf/
  2. cp spark-env.sh.template spark-env.sh #复制conf下spark-env.sh文件
  3. vim spark-env.sh
  4. '''
  5. # export SPARK_MASTER_IP=node01 # 告知spark的master运行在哪个机器上,standalone模式配置,standalone Ha模式和yarn模式不需要
  6. export SCALA_HOME=/usr/softwaretmp/bigdata/scala/scala-2.11.12
  7. export SPARK_WORKER_MEMORY=1g
  8. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171 # 设置java安装目录
  9. export HADOOP_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3
  10. export HADOOP_CONF_DIR=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop # 读取HDFS上文件
  11. export YARN_CONF_DIR=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop # 运行yarn集群
  12. # YARN模式下只要配置HADOOP_CONF_DIR和YARN_CONF_DIR
  13. '''

                配置spark从节点,修改slaves文件:主节点(node01,slaves文件只包含节点信息,其他注释不需要)

  1. cp slaves.template slaves
  2. vim slaves
  3. '''
  4. node02
  5. node03
  6. '''

                向所有子节点发送spark配置好的文件包:主节点(node01)

  1. scp -r /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7 root@node02:/usr/softwaretmp/bigdata/spark/
  2. scp -r /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7 root@node03:/usr/softwaretmp/bigdata/spark/

                配置spark环境变量:所有节点(node01,node02,node03)

  1. vim /etc/profile
  2. '''
  3. # set spark environment
  4. export SPARK_HOME=/usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7
  5. export PATH=$SPARK_HOME/bin:$PATH
  6. '''
  7. source /etc/profile

                开启spark环境:主节点(node01),注意是standalone模式还是yarn模式

                        standalone模式测试

  1. /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/sbin/start-all.sh
  2. # 浏览器打开验证:ip:8080

                        yarn模式测试

  1. bin/pyspark --master local[*] # 本地模式,所以资源启动
  2. bin/pyspark --master spark://node01:7077 # 集群模式启动
  3. bin/pyspark --master yarn # yarn模式启动
  4. bin/pyspark --master yarn --deploy-mode client|cluster
  5. # --deploy-mode 选项是指定部署模式,默认是客户端模式;client就是客户端模式,cluster就是集群模式;--deploy-mode仅可以用在yarn模式下
  6. # Cluster模式即:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器
  7. # Client模式即:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中
  8. # 举例:
  9. Client模式:
  10. bin/spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executor 2 --total-executor-cores 3 /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/example/src/main/python/pi.py 100
  11. Cluster模式:
  12. bin/spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executor 2 --total-executor-cores 3 /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/example/src/main/python/pi.py 100

                spark on hive配置:根据原理,就是spark能够连上hive的Metastore就可以了,配置如下:

                        1、Metastore需要存在并开机

  1. cd /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/conf
  2. vim hive-site.xml
  3. '''
  4. <configuration>
  5. <!--HIVE产生的元数据存放位置-->
  6. <property>
  7. <name>hive.metastore.warehouse.dir</name>
  8. <value>/usr/softwaretmp/bigdata/hive_remote/warehouse</value>
  9. </property>
  10. <!--使用本地服务连接HIVE,默认为true-->
  11. <property>
  12. <name>hive.metastore.local</name>
  13. <value>false</value>
  14. </property>
  15. <!--连接服务器-->
  16. <property>
  17. <name>hive.metastore.uris</name>
  18. <value>thrift://node02:9083</value>
  19. </property>
  20. </configuration>
  21. '''

                        2、spark知道Metastore在哪里(IP端口号)

                                步骤2:将mysql的驱动jar包放入spark的jars目录

上传已下载好的mysql-connection-java-5.1.47-bin.jar 到 /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/jars

                                步骤3:确保hive配置了Metastore相关服务,检查hive的配置文件目录:hive-site.xml

4.11、分布式anaconda安装

        anaconda3搭建:三个节点(node01,node02,node03)

  1. cd /usr/softwaretmp/bigdata
  2. scp -r /usr/softwaretmp/bigdata/anaconda/Anaconda3-2019.03-Linux-x86_64.sh root@node02:/usr/softwaretmp/bigdata/anaconda/
  3. scp -r /usr/softwaretmp/bigdata/anaconda/Anaconda3-2019.03-Linux-x86_64.sh root@node03:/usr/softwaretmp/bigdata/anaconda/
  4. sh ./Anaconda3-2020.07-Linux-x86_64.sh
  5. '''
  6. 回车 -> enter -> enter -> yes -> /usr/softwaretmp/bigdata/anaconda/anaconda3 -> yes -> exit
  7. 重新登入
  8. '''
  9. vim /root/.condarc # 更改国内源
  10. '''
  11. channels:
  12. - defaults
  13. show_channel_urls: true
  14. default_channels:
  15. - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  16. - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  17. - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
  18. custom_channels:
  19. conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  20. msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  21. bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  22. menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  23. pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  24. simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  25. '''
  26. conda create -n pyspark python=3.6 # 创建虚拟环境
  27. conda activate pyspark # 切换虚拟环境
  28. vim /etc/profile # 配置环境变量,是pyspark调用anaconda虚拟环境的python解释器
  29. '''
  30. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171
  31. export HADOOP_HOME=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3
  32. export SPARK_HOME=/usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7
  33. export PYSPARK_PYTHON=/usr/softwaretmp/bigdata/anaconda/anaconda3/envs/pyspark/bin/python3.6 # 新增的
  34. export HADOOP_CONF_DIR=/usr/softwaretmp/bigdata/hadoop/hadoop-2.7.3/etc/hadoop # 新增的
  35. '''
  36. source /etc/profile
  37. vim /root/.bashrc # 修改用户的个性化设置文件,添加环境变量
  38. '''
  39. export JAVA_HOME=/usr/softwaretmp/bigdata/java/jdk1.8.0_171
  40. export PYSPARK_PYTHON=/usr/softwaretmp/bigdata/anaconda/anaconda3/envs/pyspark/bin/python3.6
  41. '''

        虚拟环境中创建pyspark包:

  1. conda activate pyspark # 切换虚拟环境
  2. # pyspark是spark官方提供的一个python类库,内置了完全的spark API,可用来编写spark应用程序,并将其提交到spark集群中运行
  3. pip install pyspark==2.4 -i https://pypi.tuna.tsinghua.edu.cn/simple # 国内清华源
  4. pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple

                测试:

  1. python
  2. '''
  3. from pyspark import SparkContext,SparkConf
  4. conf = SparkConf().setMaster("local[*]").setAppName("wordCountHelloWorld")
  5. sc = SparkContext(conf=conf)
  6. print(sc.parallelize([1,2,3,4,5]).map(lambda x: x + 1).collect())
  7. '''
  8. exit()

        虚拟环境安装jupyter notebook:node01

  1. pip install Jupyter # 安装Jupyter notebook
  2. jupyter notebook --generate-config # 生成Jupyter notebook 配置文件
  3. jupyter notebook password # 配置Jupyter notebook密码 root
  4. vim ~/.jupyter/jupyter_notebook_config.py # 修改配置文件
  5. '''
  6. c.NotebookApp.allow_remote_access = True
  7. c.NotebookApp.open_browser = False # 不想在服务器上直接打开Jupyter Notebook,所以设置成False
  8. c.NotebookApp.ip = '*' # 所有绑定服务器的IP都能访问,若想只在特定ip访问,输入ip地址即可
  9. c.NotebookApp.allow_root = True # 为了安全,Jupyter默认不允许以root权限启动jupyter
  10. c.NotebookApp.notebook_dir = '/root/works' # 设置Jupyter的根目录
  11. c.NotebookApp.port = 8888 #端口可以更改
  12. '''

                Jupyter notebook 更换kernel:
    

  1. conda activate 环境名
  2. conda install nb_conda_kernels
  3. python -m ipykernel install --user --name 环境名称 --display-name "显示的名称"

                远程连接测试:

  1. jupyter notebook/jupyter notebook --ip 0.0.0.0 -> 本地浏览器输入链接 -> 新建.notebook文件
  2. 若出现:500 : Internal Server Error -> AttributeError: module 'nbconvert.exporters' has no attribute 'WebPDFExporter'
  3. 解决办法:conda install nbconvert notebook

4.12、配置本地pycharm professional(专业版):本地windows

        创建项目:

                打开 -> create new project -> Existing interpreter -> ... -> 添加远程环境(SSH Interpreter) -> 
        输入(链接、用户、密码) -> 输入远程服务器上python地址

        新建文件进行测试:

                新建test.py -> 右键run

  1. # coding:utf8
  2. from pyspark import SparkContext,SparkConf
  3. if __name__ == '__main__':
  4. # conf = SparkConf().setMaster("local[*]").setAppName("wordCountHelloWorld") # 本地模式
  5. conf = SparkConf().setAppName("wordCountHelloWorld") # 集群模式
  6. # 如果提交集群运行,除了主代码外,还依赖其他代码文件,需要设置参数:spark.submit.pyFiles,参数值可以是单个.py文件,也可以是.zip压缩包(有多个依赖文件时可以用zip压缩后上传)
  7. conf.set("spark.submit.pyFiles","other_py.py")
  8. sc = SparkContext(conf=conf)
  9. # file_rdd = sc.textFile("data/word")
  10. file_rdd = sc.textFile("hdfs://node01:9000/input/word.txt")
  11. word_rdd = file_rdd.flatMap(lambda line: line.split(" "))
  12. word_with_one_rdd = word_rdd.map(lambda x: (x, 1))
  13. result_rdd = word_with_one_rdd.reduceByKey(lambda a, b: a + b)
  14. # result_rdd = file_rdd.flatMap((lambda line: line.split(" "))).map(lambda x: (x, 1)).reduceByKey(lambda a, b: a + b)
  15. print(result_rdd.collect())

                在服务器上提交运行:node01

  1. /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --master local[*] /root/work/halloworld.py
  2. /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --master yarn /root/work/halloworld.py
  3. /usr/softwaretmp/bigdata/spark/spark-2.4.0-bin-hadoop2.7/bin/spark-submit --master yarn --py_files ./defs.py /root/work/halloworld.py

                        # 榨干集群性能提交

  1. cat /proc/cpuinfo | grep processor | wc -l # 查看CPU有几核
  2. free -wh # 查看内存有多大
  3. # 简单规划:1、吃掉6核CPU;2、吃掉12G内存;规划后:希望使用6个executor来干活,每个executor吃掉1核CPU 2G内存
  4. bin/spark-submit --master yarn --py-files /root/work/defs.py --executor-memory 2g --executor-cores 1 --num-executors 6 /root/work/halloworld.py

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/776608
推荐阅读
相关标签
  

闽ICP备14008679号