大数据处理的技术栈
1、 HADOOP是apache旗下的一套开源软件平台
2、 HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
3、 HADOOP的核心组件有
a) HDFS(分布式文件系统)—存储数据
b) YARN(运算资源调度系统)—分配和调度硬件资源(cpu、内存)给mapreduce
c) MAPREDUCE(分布式运算编程框架)—对存储的数据进行统计、计算 —Spark
Spark可以通过本地、standalone或者yarn运行模式计算本地文件或者内存中集合中数据。
而海量数据保存在hdfs,spark要对海量数据进行处理,就必须搭建Hdfs
[root@localhost jdk]# rpm -qa|grep jdk
java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
[root@localhost jdk]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
[root@localhost jdk]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64
[root@localhost jdk]# rpm -qa | grep jdk
[root@localhost jdk]# java -version
-bash: /usr/bin/java: 没有那个文件或目录
2.2 解压
2.3 创建安装目录
2.5 配置环境变量
修改/etc/profile文件
vi /etc/profile
(注意路径不要写错了,可测试下)
JAVA_HOME=/usr/local/jdk/jdk1.7.0_51
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
2.6 环境变量立即生效
source /etc/profile
2.7 测试
hostname 查看当前系统主机名
一种方法用命令直接更改
hostnamectl set-hostname mini1
1.查看防火墙状态
firewall-cmd --state
2.停止firewall
systemctl stop firewalld.service
3.禁止firewall开机启动
systemctl disable firewalld.service
命令行输入:yum install ntp 下载ntp插件 ,
下载完成后 命令行输入:ntpdate -u ntp1.aliyun.com
然后命令行输入:date
出现当前的时间,并且四台都时间同步。
我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。
[root@node21 ~]# vi /etc/hosts
配置主机host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.244.134 mini1
192.168.244.135 mini2
192.168.244.136 mini3
将配置发送到其他主机(同时在其他主机上配置)
[root@node21 ~]# scp -r /etc/hosts root@mini2:/etc/
[root@node21 ~]# scp -r /etc/hosts root@mini3:/etc/
[root@node21 ~]# scp -r /etc/hosts root@mini4:/etc/
然后分别执行 /bin/hostname hostsname 使之生效
测试
[root@node21 ~]# ping node21
[root@node21 ~]# ping node22
[root@node21 ~]# ping node23
再 本地映射配置 C:\Windows\System32\drivers\etc\hosts
生成公钥密钥对
在每个节点上分别执行:
命令行输入:ssh-keygen -t rsa
一直按回车直到生成结束
然后将秘钥,分发给各个节点包括自己,这样就可以免秘钥执行自己的脚本,和登录其他的几点
[root@ mini1 ~]# ssh-copy-id mini2
[root@ mini1~]# ssh-copy-id mini3
[root@ mini1~]# ssh-copy-id mini4
[root@ mini1~]# ssh-copy-id mini1
测试 看是否成功,执行
ssh mini2
ssh mini3
ssh mini4
能够登录则说明设置成功。
ü 上传HADOOP安装包到mini1
ü 规划安装目录 /root/hadoopsoft/hadoop-2.5.1
ü 解压安装包 tar zvxf hadoop-2.5.1
ü 修改配置文件 /root/hadoopsoft/hadoop-2.5.1/etc/hadoop/
hadoop-env.sh core-site.xml
hdfs-site.xml slaves
安装版本hadoop2.5.2
上传至mini,对其进行配置
[root@mini1 hadoopsoft]# tar zxvf hadoop-2.5.1_x64.tar.gz
/root/hadoopsoft/hadoop-2.5.1/etc/hadoop/ hadoop-env.sh
得到JAVA_HOME环境变量值
修改脚本中JAVA_HOME的值
[root@mini1 hadoop-2.5.1]# echo ${JAVA_HOME}
/usr/local/jdk/jdk1.7.0_51
[root@mini1 hadoop-2.5.1]# vi etc/hadoop/hadoop-env.sh
[root@mini1 hadoop-2.5.1]# vi etc/hadoop/core-site.xml
² 配置内容
fs.defaultFS hdfs://mini1:9000 hadoop.tmp.dir /opt/hadoop
Hadoop可以hdfs作为文件系统,还可以使用gfs、tfs、nfs以及file://本地文件系统
hdfs://mini1:9000配置声明Hadoop使用hdfs文件系统,客户端向mini1主机的9000端口获取文件
mini1是namenode节点,记录文件在各个节点保存的信息
—hdfs主节点—
fs.defaultFS
hdfs://mini1:9000
—hadoop临时文件
不需要opt目录下创建hadoop目录
格式化命令会自动在opt下创建hadoop目录
—
hadoop.tmp.dir
/opt/hadoop
[root@mini1 hadoop-2.5.1]# vi etc/hadoop/hdfs-site.xml
配置内容
dfs.replication 2
dfs.replication=2
客户端将文件数据保存到hdfs,如果hdfs仅仅将数据保存一份,如果保存数据的机器宕掉,那么客户端无法从hdfs获取到文件数据。
Hdfs默认replication值为3
Hdfs集群和yarn集群启动脚本读取都会读取slaves文件内容,启动文件中定义各个datanode节点或者nodemanager节点
[root@mini1 hadoop-2.5.1]# vi etc/hadoop/slaves
Hadoop命令在bin目录中,故在其他目录执行Hadoop命令,每次需要到bin目录中。
可以在环境变量文件profile中设置HADOOP_HOME环境变量,这样在不同目录下都可以执行Hadoop命令
hadoop –fs
² 给mini1设置环境变量
[root@mini1 hadoop-2.5.1]# vi /etc/profile
JAVA_HOME=/usr/local/jdk/jdk1.7.0_51HADOOP_HOME=/root/hadoopsoft/hadoop-2.5.1PATH= P A T H : PATH: PATH:JAVA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbinCLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar export JAVA_HOMEexport HADOOP_HOMEexport PATHexport CLASSPATH
修改前
[root@mini1 hadoop-2.5.1]# source /etc/profile
² 给mini2、mini3、mini4设置环境变量,且让环境变量生效,将环境变量文件复制到mini2/mini3/mini4
[root@mini1 hadoop-2.5.1]scp /etc/profile mini2:/etc/
[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini2:/root/hadoopsoft/
[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini3:/root/hadoopsoft/
[root@mini1 hadoopsoft]# scp -r hadoop-2.5.1 root@mini4:/root/hadoopsoft/
只需要在namenode节点(即主机mini1)进行格式化处理
[root@mini1 hadoopsoft]# hadoop namenode -format
Hdfs格式化得到初始目录,记录分布式文件的信息
在master中通过start-dfs.sh脚本启动整个HDFS集群
[root@mini1 hadoop-2.5.1]# ./sbin/start-dfs.sh
如果访问失败 则需要在 mini1 上关闭防火墙
1、在root 的账号下 查看防火墙的状态
#firewall-cmd --state
若为running 则需要关闭
2、关闭防火墙
#systemctl stop firewalld.service
再查看防火墙是否关闭,若为 not running 则已经关闭
3、再访问 http://mini1:50070/
如果 用主机名 访问失败,而IP 能正常访问的 需要在 windows 下C:\Windows\System32\drivers\etc 找到host文件
添加主机名和 IP 的映射。
hadoop fs -ls /
[root@mini4 ~]# ls
anaconda-ks.cfg hadoopsoft install.log install.log.syslog temp
[root@mini4 ~]# echo abcdefg > hello.txt
[root@mini4 ~]# ls
anaconda-ks.cfg hadoopsoft hello.txt install.log install.log.syslog temp
[root@mini4 ~]# hadoop fs -put hello.txt /
通过本地命令查看上传hadoop的文件
[root@mini4 hadoop]# tree
.
└── dfs
└── data
├── current
│ ├── BP-1470236278-192.168.136.61-1534309556569
│ │ ├── current
│ │ │ ├── finalized
│ │ │ │ ├── blk_1073741825 hello.txt保存找blk_1073741825块中
│ │ │ │ └── blk_1073741825_1001.meta
│ │ │ ├── rbw
│ │ │ └── VERSION
│ │ ├── dncp_block_verification.log.curr
│ │ ├── dncp_block_verification.log.prev
│ │ └── tmp
│ └── VERSION
└── in_use.lock
8 directories, 7 files
[root@mini4 hadoop]# cd dfs/data/current/BP-1470236278-192.168.136.61-1534309556569/current/finalized/
[root@mini4 finalized]# cat blk_1073741825
abcdefg
查看另外一个备份文件(mini1是namenode节点,负责管理文件的元信息,不会保存文件)
[root@mini3 hadoop]# tree
.
└── dfs
└── data
├── current
│ ├── BP-1470236278-192.168.136.61-1534309556569
│ │ ├── current
│ │ │ ├── finalized
│ │ │ │ ├── blk_1073741825
│ │ │ │ └── blk_1073741825_1001.meta
│ │ │ ├── rbw
│ │ │ └── VERSION
│ │ ├── dncp_block_verification.log.curr
│ │ ├── dncp_block_verification.log.prev
│ │ └── tmp
│ └── VERSION
└── in_use.lock
8 directories, 7 files
[root@mini3 hadoop]# cd dfs/data/current/BP-1470236278-192.168.136.61-1534309556569/current/finalized/
[root@mini3 finalized]# cat blk_1073741825
abcdefg
在mini1(namenode节点)上传
上传大于128M,观察hdfs分片
apps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata hello.avi[hadoop@mini4 ~]$ hadoop fs -put cenos-6.5-hadoop-2.6.4.tar.gz /[hadoop@mini4 ~]$ hadoop fs -ls /Found 2 items-rw-r–r-- 2 hadoop supergroup 180813065 2018-06-26 02:10 /cenos-6.5-hadoop-2.6.4.tar.gz-rw-r–r-- 2 hadoop supergroup 11 2018-06-26 00:53 /hello.avi[hadoop@mini4 ~]$
实际存储路径
合并mini1中分片数据到tmp.file中,对tmp.file进行解压操作
[hadoop@mini2 subdir0]$ cat blk_1073741826 >> tmp.file[hadoop@mini2 subdir0]$ cat blk_1073741827 >> tmp.file[hadoop@mini2 subdir0]$ tar zxvf tmp.file[hadoop@mini2 subdir0]$ ll总用量 354540-rw-rw-r–. 1 hadoop hadoop 134217728 6月 26 02:10 blk_1073741826-rw-rw-r–. 1 hadoop hadoop 1048583 6月 26 02:10 blk_1073741826_1002.meta-rw-rw-r–. 1 hadoop hadoop 46595337 6月 26 02:10 blk_1073741827-rw-rw-r–. 1 hadoop hadoop 364035 6月 26 02:10 blk_1073741827_1003.metadrwxrwxr-x. 9 hadoop hadoop 4096 3月 8 2016 hadoop-2.6.4-rw-rw-r–. 1 hadoop hadoop 180813065 6月 26 02:14 tmp.file
从hdfs中得到文件
[hadoop@mini1 ~]$ lsapps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata[hadoop@mini1 ~]$ rm -f cenos-6.5-hadoop-2.6.4.tar.gz [hadoop@mini1 ~]$ lsapps hdpdata[hadoop@mini1 ~]$ hadoop fs -get /cenos-6.5-hadoop-2.6.4.tar.gz[hadoop@mini1 ~]$ lsapps cenos-6.5-hadoop-2.6.4.tar.gz hdpdata[hadoop@mini1 ~]$
mini1-namenode,设置离开安装模式
[root@mini1 ~]# hadoop dfsadmin -safemode leave
**[global]default.alias=dev[dev.alias]url=http://mini1:50070**user=root
#!/usr/bin/env python*# encoding: utf-8from hdfs import Config from hdfs.client import Client from hdfs.ext.dataframe import read_dataframe, write_dataframe import pandas as pd def put_to_hdfs(client,local_path,hdfs_path): client.upload(hdfs_path, local_path,cleanup=True) # *删除hdfs文件def delete_hdfs_file(client, hdfs_path): client.delete(hdfs_path)
修改源文件config.py的内容
default_path = osp.expanduser(‘hdfscli.cfg’) # default_path = osp.expanduser(’~/.hdfscli.cfg’)
from hdfs.ext.dataframe import read_dataframe, write_dataframe import pandas as pd def put_to_hdfs(client,local_path,hdfs_path): client.upload(hdfs_path, local_path,cleanup=True) # 删除hdfs文件def delete_hdfs_file(client, hdfs_path): client.delete(hdfs_path)
修改源文件config.py的内容
default_path = osp.expanduser(‘hdfscli.cfg’) # default_path = osp.expanduser(’~/.hdfscli.cfg’)