hadoop大数据仓库
目录
- HDFS详细
- 虚拟机环境准备
- linux系统与windows系统数据交互
- paramiko模块
- 公钥私钥
是⼀个⽂件系统,⽤于存储⽂件,通过⽬录树 来定位⽂件; 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各⾃的⻆⾊
HDFS的使⽤场景
适合⼀次写⼊,多次读出的场景,且不⽀持⽂件的修改
适合⽤来做数 据分析,并不适合⽤来做⽹盘应⽤
其他补充
# 热备与冷备 热备:不停服更新 冷备:停服更新 # 热数据与冷数据 热数据:使用频率较高的数据 冷数据:使用频率较低的数据 # HDFS存储数据的数据块大小 1.X是64M其他版本是128M '''数据块大小一般使用默认的即可 无需修改''' # 保存副本的节点选择 两个备份在同一个机架 另外一个要在不同的机架
前提
1.何为快照?
给虚拟机保存当下的状态 之后可以回退到保存的状态
2.什么时候用快照?
在对虚拟机执行一些比较危险的操作之前,可以先快照之后还可以返回
1.克隆多台虚拟机
链接克隆
链接克隆速度很快但是需要保证原机器运行正常
完整克隆
完整克隆速度较慢但是克隆完毕之后克隆机与原机器之间再无关系

2.创建虚拟机名称

3.成功完成

4. 同样的方法克隆再3台

5.依次修改克隆出来的机器ip地址和主机名
# ip地址修改 vim /etc/sysconfig/network-scripts/ifcfg-eth0 systemctl restart network # host主机名 hostnamectl set-hostname hadoop101 bash
6.修改hosts文件添加映射关系

7..关闭防火墙
systemctl disable firewalld
systemctl status firewalld
reboot
前期文件准备
步骤一、在opt目录下创建两个文件夹
mkdir software # 存放压缩文件 mkdir module # 存放解压之后的文件
步骤二、将JDK个Hadoop压缩包传入
方式1(拖拽直接上传): 1.下载对应插件 yum install lrzsz -y # 验证是否安装成功 rpm -qa lrzsz 2.python中的paramiko模块

Paramiko模块
通过ssh远程连接服务器并执行想要命令 类似于Xshell 链接服务器有两种方式 1.用户名和密码连接服务器 2.公钥私钥连接服务器 paramiko模块支持上面两种连接服务器的方式 # 安装 pip3 install paramiko
代码
# 用户名和密码的方式 import paramiko # 创建ssh对象 ssh = paramiko.SSHClient() # 允许链接不在know_hosts文件中主机 ssh.set_missing_host_key_policy(paramiko.Au toAddPolicy()) # 链接服务器 ssh.connect(hostname='IP',port=22,username= 'root',password='jason123') # 执行命令 stdin, stdout, stderr = ssh.exec_command('ip a') # 获取结果 res = stdout.read() # 基于网络传输 该结果是一个bytes类型 print(res.decode('utf-8')) # 断开链接 ssh.close()

公钥与私钥
# 公钥 就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的 # 私钥 就是自己的,必须非常小心保存,最好加上密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有 # 公钥与私钥的作用 用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密
公钥私钥方式
首先你要产生你自己的公钥和私钥
然后将你的公钥上传到服务器保存之后就可以通过私钥来链接
具体步骤
1.下载git并安装(提供windows环境的linux操作界面) # https://git-scm.com/ 2.右键git bash here进入git终端(相当于linux 界面) ssh-keygen -t rsa 3.拷贝公钥至远程服务器 ssh-copy-id -i 公钥文件路径 username@hostname


也可用python代码执行
# 公钥和私钥(先讲公钥保存到服务器上) import paramiko # 读取本地私钥 private_key = paramiko.RSAKey.from_private_key_file('a.tx t') # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.Au toAddPolicy()) # 连接服务器 ssh.connect(hostname='IP', port=22, username='root', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('ls /') # 获取命令结果 result = stdout.read() print(result.decode('utf-8')) # 关闭连接 ssh.close()
Paramiko上传下载文件
方式一:用户名密码方式
完整代码
import paramiko # 用户名和密码 transport = paramiko.Transport(('172.16.219.168', 22)) transport.connect(username='root', password='jason123') sftp = paramiko.SFTPClient.from_transport(transpor t) # 上传文件 sftp.put("a.txt", '/data/tmp.txt') # 注意上传文件到远程某个文件下 文件必须存在 # 下载文件 sftp.get('/data/tmp.txt', 'hahahha.txt') # 将远程文件下载到本地并重新命令 transport.close()
方式二:公钥私钥方式
完整代码
import paramiko private_key = paramiko.RSAKey.from_private_key_file('a.tx t') transport = paramiko.Transport(('172.16.219.168', 22)) transport.connect(username='root', pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transpor t) # 将location.py 上传至服务器 /tmp/test.py sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get('remove_path', 'local_path') transport.close()
JDK环境准备
1.将解压之后的放入module
tar -zxvf jdk...tar.gz -C /opt/module/

2.环境变量配置
vim /etc/profile
'''添加内容'''
## JAVA_HOME export JAVA_HOME=/opt/module/jdk1.8.0_144 export PATH=$PATH:$JAVA_HOME/bin

3.使环境变量生效
source /etc/profile
4.查看是否有效
java -version

Hadoop环境准备(同上操作)
1.解压文件
tar -zxvf hadoop...tar.gz -C /opt/module/
2.环境变量配置
vim /etc/profile
'''添加内容'''
##HADOOP_HOME export HADOOP_HOME=/opt/module/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
3.使环境变量生效
source /etc/profile
4.查看是否有效
hadoop
Hadoop目录结构
# bin 主要服务 hadoop 管理整个hadoop集群 hdfs 管理数据存储 yarn 管理资源调度 # etc hadoop配置文件 sbinhadoop启动停止、整个集群启动停止 share说明文档/手册,大量使用案例

官方案例之Grep过滤
# 1.创建input文件夹 mkdir input # 2.将Hadoop 的xml配置文件复制到input文件夹内 cp etc/hadoop/*.xml input/ # 3.从多个文件内过滤出符号条件的文件内容 bin/hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-3.2.1.jar grep input/ output 'dfs[a-z.]+' # 4.查看输出结果 cat output/*

官方案例之WordCount
# 1.创建wcinput文件夹 mkdir wcinput # 2.在wcinput 文件下创建一个wc.input 文件 cd wcinput [jason@hadoop101 wcinput]$ touch wc.input # 3.编辑wc.input文件 vim wc.input '''文件内容''' hadoop yarn hadoop mapreduce jason jason # 4.回到 Hadoop 目录/opt/module/hadoop-2.7.2 执行程序 bin/hadoop jar share/hadoop/mapreduce/hadoop- mapreduce-examples-2.7.2.jar wordcount wcinput/ wcoutput/ # 5.查看结果 cat wcoutput/part-r-00000

伪分布式模式
1在etc/hadoop路径下修改配置文件
vim core-site.xml
<!-- 指定 HDFS 中 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定 Hadoop 运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>

2.etc/hadoop路径下
vim hadoop-env.sh
2.1 新建连接查看并拷贝 echo $JAVA_HOME 2.2 修改hadoop-env.sh文件中的JAVA_HOME export JAVA_HOME = ...


3.etc/hadoop路径下
vim hdfs-site.xml
<!-- 指定 HDFS 副本的数量 --> <property> <name>dfs.replication</name> <value>1</value> </property>

4.退出到hadoop根目录下(hadoop-2.7.2)
4.1格式化 NameNode
hdfs namenode - format
4.2启动 NameNode
sbin/hadoop-daemon.sh start namenode
4.3启动 DataNode
sbin/hadoop-daemon.sh start datanode

# 5.查看是否启动成功
# 5.1命令的形式
jps
'''ps:jps 是 JDK 中的命令,不是 Linux 命令。不安装 JDK 不能使用 jps'''
# 5.2浏览器可视化界面
虚拟机ip地址,端口号50070

6.浏览器界面Browse Directory
bin/hdfs dfs -mkdir -p /user/jason/input
与linux操作基本一致
bin/hdfs dfs -ls /
7.将hadoop-2.7.2路径下的wcinput文件上传到hdfs路径下
bin/hdfs dfs -put wcinput/wc.input /user/jason/input

8.在hdfs上实现字符统计
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-example-2.7.2.jar wordcount /user/jason/input /user/jason/output
浏览器可视化查看或者命令查看
bin/hdfs dfs -cat /user/jason/ouput/p*

cd logs/ ll cat ...namenode... cat ...datanode... # 只要日志是大片大片的,那基本就是没异常,如果出现一小块聚集的一般都是异常
为什么不能一直格式化 NameNode,格式化 NameNode,要注意什么?
# 1.在hadoop2.7.2目录下 cd data/tmp/dfs # 2.查看文件 ll data # 存储datanode数据 name # 存储namenode数据 # 3.获取namenode集群id号 cd data/tmp/dfs/name/current/ cat VERSION # 4.获取datanode集群id号 cd data/tmp/dfs/data/current/ cat VERSION

注意:
格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集 群 id 不一致集群找不到已往数据
所以,格式 NameNode 时,一定要先删除 data 数据和 log 日志,然后再格式化 NameNode
1.在hadoop-2.7.2路径下
cd etc/hadoop
vim yarn-env.sh
2.修改配置
export JAVA_HOME=/opt/module/jdk1.8.0_144

3.编辑文件内容
vim yarn-site.xml
<!-- Reducer 获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 YARN 的 ResourceManager 的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>
4.在hadoop路径下
vim mapred-env.sh
5.修改配置
export JAVA_HOME=/opt/module/jdk1.8.0_144
6.修改文件名
mv mapred-site.xml.template mapred-site.xml
7.编辑文件内容
vim mapred-site.xml
<!-- 指定 MR 运行在 YARN 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
8.在hadoop-2.7.2路径下启动yarn
sbin/yarn-daemon.sh start resourcemanager
9.在hadoop-2.7.2路径下启动NodeManager
sbin/yarn-daemon.sh start nodemanager
10.查看服务是否正常启动
jps

11.查看mapreduce服务
IP:8088

编辑文件内容
vim etc/hadoop/mapred-site.xml """ <!-- 历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop101:10020</value> </property> <!-- 历史服务器 web 端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop101:19888</value> </property> """

2.在hadoop-2.7.2路径下启动历史服务器
sbin/mr-jobhistory- daemon.sh start historyserver
刷新页面再点击图形化界面history标签

1.在hadoop路径下编辑文件
vim yarn-site.xml """ <!-- 日志聚集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日志保留时间设置 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> """

# 注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和
HistoryManager
2.关闭 NodeManager 、ResourceManager 和 HistoryManager
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory- daemon.sh stop historyserver
3.启动 NodeManager 、ResourceManager 和 HistoryManager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory- daemon.sh start historyserver
4.删除 HDFS 上已经存在的输出文件
bin/hdfs dfs -rm -r /user/jason/output
5.执行 WordCount 程序
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar
wordcount /user/jason/input /user/jason/output
6.可视化界面查看日志信息
Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值 要获取的默认文件 文件存放在 Hadoop 的 jar 包中的位置 [core-default.xml] hadoop-common-2.7.2.jar/ core-default.xml [hdfs-default.xml] hadoop-hdfs-2.7.2.jar/ hdfs-default.xml [yarn-default.xml] hadoop-yarn-common-2.7.2.jar/ yarn-default.xml [mapred-default.xml] hadoop-mapreduce-client-core-2.7.2.jar/mapred-default.xml 自定义配置文件: core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
1.bin 主要服务 hadoop 管理整个hadoop集群 hdfs 管理数据存储 yarn 管理资源调度 2.etc hadoop配置文件 '''配置文件的后缀名一般都有如下几种 .ini .conf .xml ...... ''' 3.sbin(命令核心) hadoop启动停止、整个集群启动停止 4.share 说明文档/手册,大量使用案例 5.README.txt 类似于操作说明书 里面也可以有相应广告
分布式:将一个完整的功能、软件等拆分到不同的机器上运行 # 伪分布式:在一台机器(服务器 虚拟机)上模拟多台机器的效果 # 完全分布式:真正在多台机器(服务器 虚拟机)上操作 HDFS是专门用于存储数据的地方 初始化HDFS里面上面数据都没有
拷贝
1.本地拷贝 2.远程拷贝 全量拷贝(scp):每一次都是完完整整的将数据重新加载一份 增量拷贝(rsync):检查是否有重复的项 只加载改动的数据
步骤简要
1)准备 3台客户机 2)安装 JDK 3)配置环境变量 4)安装 Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置 ssh 9)群起并测试集群
详细步骤
1)准备 3台客户机(关闭防火墙、静态 ip、主机名称) 克隆机器修改主机名和主机IP地址 2)安装 JDK 利用scp命令拷贝数据文件至三个客户机 scp -r /opt/module root@hadoop102:/opt/module scp -r /opt/module root@hadoop103:/opt/module scp -r /opt/module root@hadoop104:/opt/module 3)配置环境变量 1.利用scp命令拷贝环境变量文件至三个客户机 scp /etc/profile root@hadoop102:/etc/profile scp /etc/profile root@hadoop103:/etc/profile scp /etc/profile root@hadoop104:/etc/profile 2.source文件配置 source /etc/profile 3.验证是否成功 java 4)集群分发脚本 复制文件到所有节点的相同目录下 1.在/usr/local/bin下创建sync文件并填写以下内容 [jason@hadoop102 ~]$ cd /usr/local/bin [jason@hadoop102 bin]$ touch xsync [jason@hadoop102 bin]$ vi xsync 2.修改权限 chmod 777 xsync 3.测试 在当前机器随便找一个其他机器没有的目录 xsync test/
1.如果集群是第一次启动,需要格式化 NameNode hadoop namenode -format """ 如果集群不是第一次启动,需要删除data和logs目录 rm -rf data/ logs/ rm -rf data/ logs/ rm -rf data/ logs/ """ 2.在 hadoop102 上启动 NameNode和DataNode sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode 3.去103和104启动datanode(namenode就一个) sbin/hadoop-daemon.sh start datanode sbin/hadoop-daemon.sh start datanode 4.浏览器验证 hadoop102:50070
# 公钥私钥工作原理 # 查看know_hosts文件(访问过的主机地址) ll # 无法查看 ls -al # 可以查看 cd .ssh ll cat known_hosts # 生成公钥私钥 [jason@hadoop102 .ssh]$ ssh-keygen -t rsa # 连续回车即可 # 将102公钥拷贝到103和104 [jason@hadoop102 .shh]$ ssh-copy-id hadoop103 [jason@hadoop102 .shh]$ ssh-copy-id hadoop104 """ hadoop103中的.ssh在拷贝前后文件是有变化的 hadoop104中的.ssh在拷贝前后文件是有变化的 """ # 免密直接访问103和104 ssh hadoop103/hadoop104 # 自己用ssh访问自己也需要输入密码,可以采用相同措施解决 [jason@hadoop102 .shh]$ ssh-copy-id hadoop102 # 由于hadoop103上有一个resurcemanage所以也需要配置ssh ssh-keygen -t rsa ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104
1.配置 文件位置:/opt/module/hadoop-2.7.2/etc/hadoop/slaves vi slaves """内容(内容清空再添加) hadoop102 hadoop103 hadoop104 """ # 注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。 2.同步所有节点配置文件 xsync slaves 3.将之前单节点启动的datanode、namenode全部退出 sbin/hadoop-daemon.sh stop datanode sbin/hadoop-daemon.sh stop namenode sbin/hadoop-daemon.sh stop datanode sbin/hadoop-daemon.sh stop datanode 4.启动HDFS [jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh 5.验证每个节点对于启动的服务 jps查看照着之前的表格比较不能出错 6.启动yarn """ 这里需要将hadoop03的公钥分别发送给hadoop102、hadoop103、hadoop104 """ [jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh 7.验证每个节点对于启动的服务 jps查看照着之前的表格比较不能出错
1.上传文件到集群 1.小文件 bin/hdfs dfs -put wcinput/wc.input / 2.大文件 bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz / 3.浏览器界面测试
1. 各个服务组件逐一启动/停止 (1)分别启动/停止 HDFS 组件 hadoop-daemon.sh start/stop namenode/datanode/ secondarynamenode (2)启动/停止 YARN yarn-daemon.sh start /stop resourcemanager/nodemanager 2. 各个模块分开启动/停止(配置 ssh 是前提)常用 (1)整体启动/停止 HDFS start-dfs.sh/stop-dfs.sh (2)整体启动/停止 YARN start-yarn.sh/stop-yarn.sh
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时 的同步,比如,每隔十分钟,同步一次时间
1. 时间服务器配置(必须 root 用户)
(1)检查 ntp 是否安装
rpm -qa | grep ntp
(2)修改 ntp 配置文件
vi /etc/ntp.conf
a)修改1(授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查 询和同步时间) # 解开注释 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap b)修改2(集群在局域网中,不使用其他互联网上的时间) # 加上注释 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群 中的其他节点提供时间同步) server 127.127.1.0 fudge 127.127.1.0 stratum 10





浙公网安备 33010602011771号