提前说明一下:由于环境的配置搞得我很头疼,所以记录下来。并不是零基础,像hadoop的由来、发展史、结构、各个组件,这里都没有介绍,只是为了自己能够在忘了的时候回忆起来,所以记录下来
如何在linux上安装hadoop
首先我这里使用的是Ubuntu18.04,64位系统
1.安装jdk
由于hadoop是由java编写的,所以需要安装jdk。我这里使用的是jdk1.8.0,安装路径为/usr/local/java/jdk1.8.0_191/
配置环境变量,在 ~/.bashrc尾部添加如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export PATH=$JAVA_HOME/bin:$PATH
然后source ~/.bashrc激活
最后在终端中输入java -version,显示如下,说明配置成功
2.安装Hadoop
在安装hadoop之前,我们先安装一下ssh和rsync
apt-get install ssh
apt-get install rsync
然后配置免密码登录,因为我们的datanode和namenode之间是要进行进程通信的。可以使用以下方式配置
ssh-keygen -t rsa,一路回车即可,然后文件自动会保存在当前用户下的.ssh文件下
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys,将id_rsa.pub文件里的内容拷贝到authorized_keys文件里
这样登陆过一次之后就可以免密码登录了
接下来下载hadoop
这里我们使用hadoop的发行版,cdh,下载链接在http://archive.cloudera.com/cdh5/cdh/5/,这个发行版的好处就在于可以避免jar包的冲突。
以上便是hadoop-cdh的文件结构,我们进入./etc/hadoop目录下看看
这里面有很多的配置文件,这些配置文件非常重要,hadoop的配置所以才说麻烦,我们慢慢介绍
再来看看sbin目录下的文件
sbin目录下有很多的启动文件,启动dfs、yarn等等,当然有启动就有停止。
接下来便要修改配置文件了,进入./etc/hadoop下
首先修改hadoop-env.sh
然后修改core-site.xml
再次打开文件
然后修改hdfs-site.xml
接下来修改slaves这个文件,对于我们目前的伪分布式目前是没有什么作用的,但是对于我们理解hadoop集群是有帮助的。我们知道一个namenode带多个datanode,那么datanode的hostname或者ip在哪,有多少个呢?就是配置在slaves文件里面。
里面只有一个localhost,当然我们写成ubuntu也是可以的,因为我们的主机名就叫ubuntu
接下来启动hdfs
首先格式化文件系统(仅第一次执行即可,因为每执行一次,相当于格式化一次,hdfs上的数据也就被我们清空了),hdfs namenode -format
我们进入bin目录下执行格式化操作
执行成功,来看看有没有tmp目录
看看有没有内容
然后启动hadoop,直接执行sbin目录下的start-dfs.sh即可
出现界面如下,直接输入yes即可
显示配置成功,我们查看当前的进程
显示如下
如果出现进程少了的情况,那么说明配置文件出了问题,那么可以去记录日志的文件里面查看,那么日志记录在哪呢?
查看之后,显示的都是info,说明是正常输出,如果出错,会出现error
以上是通过查看日志文件,那么能不能通过浏览器查看呢?显然是可以的
输入http://ubuntu:50070即可,再次强调这里的ubuntu是我的主机名,你在终端中输入hostname,显示的啥就输入啥。至于端口为什么不是8020,8020是我们启动的时候用的,使用浏览器要通过50070访问
里面包含很多信息,包括你的节点,数量等等
那么启动既然成功了,停止该怎么办呢?直接进入sbin目录下,执行./stop-dfs.sh即可
hdfs shell常用命令的使用
主要命令有:ls mkdir put get rm,和linux shell非常相似
前面忘记说了,建议把hadoop的bin目录配置到环境变量里面去,我这里已经配置好了
这便是hadoop shell的常用命令,比方说第二个namenode -format是不是很熟悉,我们之前用来格式化hadoop文件系统的
再来看看第一个命令dfs,可以在支持hadoop的文件系统上运行文件系统命令,我们执行hdfs dfs看一下
里面的命令很多和linux是相似的,而且从参数名也能看出来作用
下面我们就来试一试吧,我在桌面上创建了一个hello.txt文件
我们打开看一看,既然文件已经上传到了hdfs,那么我们就可以直接使用hdfs shell命令打开它,使用hdfs dfs -cat xxx,可以发现和linux基本命令是保持一致的,只不过在hdfs shell中命令要加上一个-。
如果我们想创建一个目录呢?在linux上是mkdir,那么同理在hadoop上是hdfs dfs -mkdir,如果想递归创建,那么使用hdfs dfs -mkdir -p即可
如果递归显示文件目录,使用hdfs dfs -ls -R
之前展示了把本地文件复制到hdfs上面来,那么我要把hdfs的文件放到本地上面去怎么办呢?使用get
虽然是mmp.txt,但mkdir只能创建目录,所以这里还是一个目录
那么删除一个文件怎么办呢?显然熟悉linux应该能猜到,hdfs dfs -rm xxx,但是这个只能删除文件,如果想删除文件夹,hdfs dfs -rm -R XXX
我们进入浏览器页面
这里的block0表示只有一个block,为什么呢?因为文件没有分块,默认是128M,我们这里的文件就几百字节,所以无需分块
基本命令就讲到这里,至于其他的需要时可以直接输入hdfs dfs查找即可
3.安装maven
然后配置环境变量,
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.0
export PATH=$MAVEN_HOME/bin:$PATH
-------------------------------pass------------------------------
显示版本2.9.1
这里还需要修改一些其他的配置文件,进入到$HADOOP_HOME/etc/hadoop中。
首先修改hadoop-env.sh
然后修改core-site.xml
然后修改hdfs-site.xml
然后修改mapred-site.xml,由于没有这个文件,但有mapred-site.xml.template这个文件,所以我们拷贝一份。
然后配置yarn-site.xml
配置完成
接下来格式化一下
格式化成功,看一下相应的目录
可以看到之前新建的空目录,里面已经有东西了。
如果需要密码,就输入这两行,就可以免密码登陆了
最后启动一下hadoop
ssh-keygen -t rsa -P
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
4.安装maven
我安装到了/usr/local/java目录下,然后在~/.bashrc中配置环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
输入mvn输出如下,说明安装成功
5.安装python
直接apt-get install python3即可
6.安装spark
我安装到了/usr/local/目录下,然后在~/.bashrc中配置环境变量
export SPARK_HOME=/usr/local/spark/spark-2.3.1-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$PATH
输入pyspark成功进入。