一、前置(Important)
1、MySQL的sql语法,需要自己去看;在大数据开发中存储过程和函数几乎用不到;做Java开发的会用的到。
2、查询数据库中的视图和存储过程。
3、MySQL分组排序,Oracle分组排序,Spark分组排序,这些的真正含义是什么?
4、MySQL中的leftjoin、innerjoin
二、hadoop入门介绍
2.1、概念
1、广义:以apache hadoop软件为主的生态圈(Hive、Zookeeper、Hbase)
2、狭义:指的就是hadoop软件,如
- http://www.apache.org/index.html#projects-list,在这个网址,可以看到很多apache的顶级项目.
2.2、hadoop软件版本
1.X 企业不用
2.X 主流版本
3.X 没有企业敢用,因为要踩坑
很多公司都是使用CDH5.X部署的大数据环境(www.cloudera.com)
- eg:使用apache部署很麻烦,cloudera公司做了一套傻瓜式的简单部署,无论开发还是运维劳动力成本低;CDH5.X版本对应的是hadoop2.6.0版本,不等价于apache hadoop2.6.0.
- cloudera公司的人没事就去升级打补丁。
2.3、Hadoop软件主要分为三个组成部分
1、hdfs:存储 分布式文件系统
2、mapreduce:计算,是由Java代码开发的,企业不用
3、yarn:资源(CPU memory)和作业调度
- 思考一个问题:正常做开发,数据采集过来,进行计算,产生job1、job2,作业是由yarn来进行调度的。
- 也有可能从hdfs抽取数据,计算完后,再回写到hdfs
mapreduce引申出来的框架由Hive、Spark,所以MapReduce的思想一定要知道。
小结:
- 目前公司都是用Spark、Hive、Flink进行开发。
前置软件:
1、hadoop-2.6.0-cdh5.7.0
2、jdk1.7.0_45
3、sshd
jdk安装注意点:解压后查看用户用户组。
https://blog.csdn.net/zhikanjiani/article/details/89378841
2.4、hadoop下载方式
1、http://archive.cloudera.com/cdh5/cdh/5/
CTRL+F:Hadoop-2.6.0-cdh5.7.0.tar.gz,搜索到后单击进行下载。
2、使用wget下载:
wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
三、hdfs部署环境
学习都是伪分布式部署:意思是只要1台机器就够了。
3.1、 Purpose:
1、This document describes how to set up and configure a single-node Hadoop installation so that you can quickly perform simple operations using Hadoop MapReduce and the Hadoop Distributed File System (HDFS).
3.2、 软件要求:
https://cwiki.apache.org/confluence/display/HADOOP2/HadoopJavaVersions
注意:有些jdk是会有问题的,在部署的时候可能没问题,在J总公司生产上,mysql-jdbc jar包的问题导致内存泄漏,在生产上严格按照要求来,根据推荐版本good的来。
ssh服务我们肯定是安装的,否则我们都无法使用SecureCRT软件来进行远程连接。
我们的主要生产系统使用的就是CentOS6.X和CentOS7.X
3.3、 开始部署:
第一步:增加hadoop用户:
- useradd hadoop
第二步:创建目录mkdir app
第三步:rz上传或者wget下载
第四步:部署jdk
1、root用户下:cd /usr/java目录,rz命令上传,
tar -xzvf jdk-8u45-linux-x64.gz
解压完后注意使用ll查看用户和用户组:
2、配置全局或者个人环境变量,
全局环境变量:vi /etc/profile 效果如下所示:
export JAVA_HOME=/usr/java/jdk1.7.0_45
#export JAVA_HOME=/usr/java/jdk1.8.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
2、完成后注意:source生效
source /etc/profile
3、扩展:新建/usr/shar/java目录
mkdir /usr/share/java
目的 :CDH环境下部署mysql jdbc jar 包
注意:以后凡是使用到解压都需要使用ll查看下用户及用户组。
扩充:
- 我们解压后发现的jdk的用户是10,使用这个命令:cat /etc/passwd|grep 10
[root@hadoop java]# cat /etc/passwd|grep 10
games:x:12:100:games:/usr/games:/sbin/nologin
hadoop:x:1000:1000::/home/hadoop:/bin/bash
三、hdfs部署环境账户当前不可用的解决办法(This account is currently not available.)
1、只要把结尾的 /sbin/nologin改为/bin/bash即可。
2、想要让用户不能登录也这样操作即可:把/bin/bash改为/sbin/nologin即可。
扩展二:
CDH:
组件 | 用户 |
---|---|
hdfs | hdfs |
yarn | yarn |
zookeeper | zookeeper |
hbase | hbase |
在生产上,su - zookeeper切不了,生产是如何做的?
- 说穿了就是把/sbin/nologin改为/bin/bash即可。
四、hdfs伪分布式部署
1、增加hadoop用户:
- useradd Hadoop
统一使用Hadoop用户:mkdir app(存放软件) data software
2、解压hadoop软件:hadoop-2.6.0-cdh5.7.0.tar.gz
- tar -xzvf hadoop-2.6.0-cdh5.7.0
配置环境变量:
export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
3、解压后的hadoop软件目录解读:
[hadoop@hadoop hadoop-2.6.0-cdh5.7.0]$ ll
total 76
drwxr-xr-x 2 hadoop hadoop 4096 Mar 24 2016 bin 可执行脚本
drwxr-xr-x 2 hadoop hadoop 4096 Mar 24 2016 bin-mapreduce1
drwxr-xr-x 3 hadoop hadoop 4096 Mar 24 2016 cloudera
drwxr-xr-x 6 hadoop hadoop 4096 Mar 24 2016 etc 配置目录(conf)
drwxr-xr-x 5 hadoop hadoop 4096 Mar 24 2016 examples
drwxr-xr-x 3 hadoop hadoop 4096 Mar 24 2016 examples-mapreduce1
drwxr-xr-x 2 hadoop hadoop 4096 Mar 24 2016 include
drwxr-xr-x 3 hadoop hadoop 4096 Mar 24 2016 lib jar包目录
drwxr-xr-x 2 hadoop hadoop 4096 Mar 24 2016 libexec
-rw-r--r-- 1 hadoop hadoop 17087 Mar 24 2016 LICENSE.txt
-rw-r--r-- 1 hadoop hadoop 101 Mar 24 2016 NOTICE.txt
-rw-r--r-- 1 hadoop hadoop 1366 Mar 24 2016 README.txt
drwxr-xr-x 3 hadoop hadoop 4096 Mar 24 2016 sbin hadoop组件的启动,停止脚本
drwxr-xr-x 4 hadoop hadoop 4096 Mar 24 2016 share
drwxr-xr-x 17 hadoop hadoop 4096 Mar 24 2016 src
4、在etc/hadoop/目录下进行逐一配置:
[hadoop@hadoop004 hadoop]$ pwd
/home/hadoop/app/hadoop/etc/hadoop
[hadoop@hadoop004 hadoop]$ ll
total 152
-rw-r--r--. 1 hadoop hadoop 4436 Mar 24 2016 capacity-scheduler.xml
-rw-r--r--. 1 hadoop hadoop 1335 Mar 24 2016 configuration.xsl
-rw-r--r--. 1 hadoop hadoop 318 Mar 24 2016 container-executor.cfg
-rw-r--r--. 1 hadoop hadoop 904 Apr 18 02:38 core-site.xml
-rw-r--r--. 1 hadoop hadoop 3670 Mar 24 2016 hadoop-env.cmd
-rw-r--r--. 1 hadoop hadoop 4333 Apr 18 03:04 hadoop-env.sh
1、 vi hadoop-env.sh 编辑如下:
The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.7.0_45
#export JAVA_HOME=/usr/java/jdk1.8.0_45
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
拥有三种模式仅作了解:
1、Standalone Operation
2、Pseudo-Distributed Operation
3、Fully-Distributed Operation
注意一句话关于Pseudo-Distributed Operation:
- Hadoop can also be run on a single-node in a pseudo-distributed mode where each hadoop daemon runs in a separate Java process(每一个Hadoop进程都是可以以一个Java进程来运行的).
2、 vi core-site.xml
路径位置:/home/hadoop/app/hadoop/etc/hadoop/core-site.xml,编辑如下:
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> //localhost可以写当前部署环境机器的IP,如果是阿里云主机配置内网IP
</property>
</configuration>
3、 vi hdfs-site.xml
路径位置:/home/hadoop/app/hadoop/etc/hadoop/hdfs-site.xml,编辑如下:
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
4.1、单台机器的无密码访问
1、当前使用hadoop用户,使用root用户会有问题,在hadoop用户下ssh localhost date会出现问题,Permission denied, please try again.
此处跟着若泽数据进行如下操作:
1、进入~目录:
[hadoop@hadoop004 hadoop]$ cd ~
[hadoop@hadoop004 ~]$ ll -a
total 52
drwx------. 2 hadoop hadoop 4096 Apr 18 02:42 .ssh
2、删除系统原有的.ssh文件
rm -rf .ssh
3、ssh-keygen 生成密钥文件,三个回车okay
4、进入到.ssh目录下,查看到有如下几个文件:id_rsa(私有密钥)、id_rsa.pub(公钥);
cat id_rsa.pub >> authorized_keys,把公钥文件追加到authorized_keys;
5、chmod -R 600 authorized_keys 赋予此文件600权限,在cdh官网上未做体现,但是在Apache官网上有写,网址如下:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
6、此时进行测试:ssh localhost date
首次通信输入yes,测试无问题如下:
[hadoop@hadoop004 .ssh]$ ssh localhost date
Thu Apr 18 05:06:30 HKT 2019
注意:上述操作步骤使用的是hadoop用户,不是root用户。
4.2、准备启动Hadoop
1、启动前首先需要格式化namenode:
- bin/hdfs namenode -format,出现successfully formatted则表示成功.
2、命令start-dfs.sh来启动hadoop:
[hadoop@hadoop004 hadoop]$ start-dfs.sh
[hadoop@hadoop004 hadoop]$ jps
52531 SecondaryNameNode
52629 Jps
52411 DataNode
52319 NameNode
单节点启动NameNode
sbin/hadoop-daemon.sh start NameNode
单节点启动SecondaryNameNode和DataNode:
命令是一样的:
hadoop-daemon.sh start secondarynamenode
hadoop-daemon.sh start datanode
4.3、hadoop日志信息解读
启动日志信息如下:
[hadoop@hadoop hadoop-2.6.0-cdh5.7.0]$ start-dfs.sh
19/10/15 16:24:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [hadoop]
The authenticity of host 'hadoop (172.16.56.88)' can't be established.
ECDSA key fingerprint is 8e:8d:a4:95:50:cc:40:d6:e5:51:0f:84:a8:7b:ce:ef.
Are you sure you want to continue connecting (yes/no)? yes
hadoop: Warning: Permanently added 'hadoop,172.16.56.88' (ECDSA) to the list of known hosts.
hadoop: starting namenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-namenode-hadoop.out
localhost: starting datanode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-datanode-hadoop.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is 8e:8d:a4:95:50:cc:40:d6:e5:51:0f:84:a8:7b:ce:ef.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /home/hadoop/app/hadoop-2.6.0-cdh5.7.0/logs/hadoop-hadoop-secondarynamenode-hadoop.out
19/10/15 16:25:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop hadoop-2.6.0-cdh5.7.0]$ jps
4182 SecondaryNameNode
4313 Jps
3933 NameNode
4028 DataNode
解释:
1、starting namenodes说明namenode可以启动多个,我们当前只部署了一个
2、localhost来启动datanode,localhost都已经配置了无密码信任关系
3、secondarynamenode在0.0.0.0这个机器上启动的,说白了其实还是在当前机器上启动的,只是信任关系配置的是localhost
4、为什么要配置ssh信任关系,启动secondarynamenode是在0.0.0.0上,第一次要输入yes,
secondarynamenode信任关系输入yes后,会在known_hosts中创建一条记录;
当我们输入ssh localhost date,首先会去authorized_keys这个文件中去找hadoop用户:hadoop机器已经配置了一个密钥,相当于用户暴露的一个公钥文件;authorized_keys可以放其它机器的文件。
ssh loclahost首先回去suthorized_keys中去找,找不到的话会让我们输入yes,因为known_hosts中没有这条记录,为什么不用输入密码?公钥文件放到了信任文件中(authorized_keys)
思考:为什么要配置ssh localhost,因为在启动的时候是需要ssh的。
出现的问题?
J总部署的时候:datanode进程没有起来,解决:cd /tmp目录下,rm -rf hadoop-hadoop,里面有datanode的地址;这时重新格式化namenode,bin/hdfs namenode -format,再次尝试重新启动,没有问题。
4.4、Web UI界面查看
- 网址:http://47.98.238.163:50070/dfshealth.html#tab-overview
- 在core-site中配置的是阿里云内网IP,浏览器访问的时候使用的是外网IP+50070端口。
NameNode | SecondaryNameNode | DataNode |
---|---|---|
名称节点 | 第二名称节点 | 数据节点 |
老大 | 老二 | 小弟 |
对于hdfs如何理解?
- 正常的电脑是一个物理机,我们在物理机上装了一个linux系统,理解为做存储用,部署文件脚本;部署hdfs的意思是,在linux系统上又部署了一个hdfs,hdfs也是一个做存储的;linux系统是从根目录 / 开始的,hdfs也是从根目录 / 开始的。
- 相当于我们在windows上划分了40G部署了一个VM虚拟机,在虚拟机上又划了一小块做hdfs,这是一个嵌套的东西。
关于hdfs的一些相关命令请参考楼主的其它博客:
- https://blog.csdn.net/zhikanjiani/article/details/100039072
HDFS命令和linux命令极其相似:
- hdfs命令能够出来是因为在~/.bash_profile中已经配置好了的原因,否则我们需要补全路径;不补全的话从环境变量中读取是读不到的。
五、作业
1、ssh博客、阅读、摘抄
2、部署hdfs伪分布式并写博客