大数据处理 | HDFS文件系统配置及基本使用

简介: Spark是目前Apache三大主流开源分布式大数据处理框架之一,它具有低时延、速度快、通用性强、生态系统等优点,此外它不仅可以用于数据的批计算,还可以用于数据的流计算,这让它倍受欢迎。因此,我准备用两篇文章介绍一下Spark集群环境的搭建和基本使用,由于本文是基于HDFS文件存储系统,因此第一篇文章会详细介绍Hadoop集群的搭建与基本使用,第二篇文章会介绍Spark集群的搭建与基本使用。

Spark简介

Spark是由加州伯克利大学AMP实验室于2009年开发并于2013年加入Apache的开源大数据并行计算框架,它凭借自身独有的优势迅速成为Apache三大分布式计算框架之一,对比于常用的hadoop,它具有低时延、速度快、通用性强等优点。此外,Spark具有完善的生态系统,在资源调度方面它拥有Mesos和YARN,在存储方面它支持本地文件系统、HDFS、Amazon S3、HBase等,在数据仓库方面它拥有Hive SQL、Spark SQL,在接口方面它拥有mlib、GraphX等。

除了运算和生态方面的优势,Spark在数据处理方式方面同时支持批计算和流计算,虽然Spark在流计算方面不如storm、flink能够支持毫秒级别,但是对于大多数对实时性要求不高的在线计算已经足够使用。

基于上述众多优点使得Spark成为一个非常热门和受欢迎的大数据处理框架,目前在很多大型公司被广泛使用。

Spark不仅可以支持集群模式,还可以支持单机模式,但是我认为之所以使用大数据处理框架,它的主要优势就体现在多机并行方面,随着数据集的增加和节点数量的增加,它的对比于传统并行模式和其他大数据处理框架的优势更加明显。单机Spark配置相对集群配置相对简单一些,也节省很多步骤,因此,本文就讲解一下集群Spark配置方式,本文的配置是建立在已经配制好JDK的基础上,所以不再详细介绍JDK的安装和配置。

Hadoop集群环境搭建

Spark可以读取多种数据源的数据,例如Amazon s3、HBase、HDFS、本地文件系统,由于数据存放在某一个节点路径下,在Spark集群的其他节点无法直接读取相应路径下的数据,而HBase、Amazon s3这些存储服务在很多场景下很难满足,例如学校实验室。因此本文就以HDFS为例来进行讲解。

Hadoop主要包括两个部门,HDFS文件存储系统用于存储数据源,MapReduce用于从文件存储系统读取数据并进行分布式处理,由于本文只用到文件存储系统HDFS,用不到MapReduce,所以本文就配置一下集群Hadoop,讲解HDFS的使用,不深入研究MapReduce的使用。

准备工作

首先要保证集群中不同节点能够互相通信,然后为每个节点配置对应的hostname,后面会用到,

$ vim /etc/hosts
10.110.113.132  master
10.110.113.133  slave0
10.110.113.134  slave1
10.110.113.135  slave2

上述master和slave是每个节点的hostname,可以作为IP的地带,通过ping的方式可以测试hostname是否正常通信,可以在master节点上测试是否连接到不同的slave节点,

$ ping slave0

或者

$ ping 10.110.113.133

注:hostname的配置可以通过sudo vim /etc/hostname修改文件进行配置。

ssh无密码登陆集群机器

由于集群配置hadoop涉及多台机器,当在master节点启动或者关闭集群hadoop时需要输入所有slave节点的密码,这样显然太麻烦,因此需要配置无密码登陆,这样后续启动时就不需要输入密码,

首先,如果节点没有安装ssh需要安装ssh,

$ sudo apt-get install ssh

然后,在每个节点上输入下面命令,测试是否能够正常登陆每个节点

$ ssh localhost

为了保证master节点能够无密码登陆所有slave节点,需要首先生成master节点的公钥,

$ ssh-keygen  -t  rsa

一直点击确定即可,然后会在home路径下生成两个文件,id_rsa和id_rsa.pub,这时需要把id_rsa.pub的内容追加到authorized_keys后面,然后把master节点id_rsa.pub拷贝到所有slave节点并追加到所有slave节点authorized_keys的后面,

首先在master节点执行操作,

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后把master节点生成的id_rsa.pub拷贝到所有slave节点,

$ scp ~/.ssh/id_rsa.pub user_name@slave0:/home/user_name/
$ scp ~/.ssh/id_rsa.pub user_name@slave1:/home/user_name/
$ scp ~/.ssh/id_rsa.pub user_name@slave2:/home/user_name/

上述user_name是slave节点的用户名,然后把id_rsa.pub追加到每个slave节点authorized_keys的后面,

$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

然后可以在master节点上通过下方命令测试是否能够正常登陆每个slave节点,

$ ssh slave0
$ ssh slave1
$ ssh slave2

注意:上述都是假设master和每个slave节点的用户名user_name一样的前提下,如果不一样需要修改~/.ssh/config文件。

安装Hadoop

87.png


打开下面链接进入到下载页面,点击下载binary文件,把hadoop-3.2.1.tar.gz文件下载到home路径下,

https://hadoop.apache.org/releases.html

然后解压下载的文件到指定目录,同时需要修改对应目录的拥有者,因为hadoop在启动后会记录日志文件,如果不修改拥有者则没有权限写入文件,无法正常启动,

$ sudo tar -zxvf ~/下载/hadoop-3.2.1.tar.gz -C /usr/local  
$ cd /usr/local/
$ sudo mv ./hadoop-3.2.1/ ./hadoop          
$ sudo chown -R user_name ./hadoop 

然后,把hadoop路径加入到环境变量里,如果需要长期有效,需要修改~/.bashrc

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

然后保存退出,执行下面命令让环境变量生效,

$ source ~/.bashrc

集群配置

首先进入到Hadoop配置文件所在目录,

$ cd /usr/local/hadoop/etc/hadoop

然后修改slave节点配置文件,

$ vim slaves
slave0
slave1
slave2

注意:上述slave0~2不是IP地址,是前面配置的hostname。

首先配置core-site.xml,

<configuration>
   <property>
      <name>hadoop.tmp.dir</name>
      <value>file:/usr/local/hadoop/tmp</value>
      <description>Abase for other temporary directories.</description>
   </property>
   <property>
      <name>fs.defaultFS</name>
      <value>hdfs://master:9000</value>
   </property>
</configuration>

上述内容只需要修改<value>hdfs://master:9000</value>这一句即可,其他的不需要修改,需要根据自己定义的master节点的hostname进行修改,例如你的master节点的hostname是hadoop,那么就需要修改成<value>hdfs://hadoop:9000</value>,端口默认为9000,

然后配置hdfs-site.xml,

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

这里dfs.replication默认值是3,它的含义是数据副本备份的数量,如果slave节点数量小于这个数的话则会报错,所以为了防止报错可以把这个值改为1,当然如果slave节点大于等于3的话也可以不修改。

如果需要使用MapReduce还需要配置mapred-site.xml,因为本文只使用HDFS而不使用MapReduce,因此就不配置mapred-site.xml了。

另外,如果需要yarn资源调度的话,需要修改yarn-site.xml,yarn是一个资源调度和分配工具,Spark本身自带资源管理器,也可以与yarn、Mesos结合使用,本文就使用Spark自带的资源管理器。

最后,需要在hadoop中配置JAVA环境,

$ vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/path/to/java

上述/path/to/java需要替换成自己JAVA安装的路径。

slave节点配置

上述全部操作都是在master节点进行的,下面需要配置slave节点。配置slave节点比较容易,只需要把文件打包复制到各个slave节点,解压即可,

$ tar -zcf ~/hadoop.tar.gz /usr/local/hadoop
$ scp ~/hadoop.tar.gz slave0:~/
$ scp ~/hadoop.tar.gz slave1:~/
$ scp ~/hadoop.tar.gz slave2:~/

然后在各个slave节点上都执行下面相同操作,

$ sudo rm -rf /usr/local/hadoop
$ sudo tar -zxvf ~/hadoop.tar.gz -C /usr/local
$ sudo chown -R user_name /usr/local/hadoop

启动Hadoop集群

通过上述的配置,master节点和slave节点的Hadoop都配置好了,下面需要做的就是启动集群上每个节点的Hadoop,

$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format
$ ./sbin/start-all.sh

注意:./bin/hdfs namenode -format这一句命令很重要,不能缺少。如果前面没有配置ssh免密登陆,执行./sbin/start-all.sh时会让输入密码。

然后在每个节点上执行下面命令,会在master节点上看到多了一个NameNode,slave节点上会多出DataNode

$ jps

HDFS基本使用

HDFS的使用和Linux命令非常相似,例如上传数据用put,创建目录用mkdir,查看目录内容用ls,删除目录用rm,但是也有不同之处,下面就来看一下简单的示例,

创建目录

$ ./bin/hdfs dfs -mkdir -p /hello

上传文件到HDFS

首先先新建一个本地文件,

$ vim ~/test.txt
hello world
hello world
hello world

然后使用下面命令进行上传,

$ ./bin/hdfs dfs -put ~/test.txt /hello

查看目录和文件内容

$ ./bin/hdfs dfs -ls /hello
/hello/test.txt
$ ./bin/hdfs dfs -cat /hello/test.txt
hello world
hello world
hello world

然后我们就可以用Spark访问hdfs文件系统的文件,

text_file = sc.textFile("hdfs://master:9000/hello/text.txt")

文件的路径分为两部分,一部分是前面core-site.xml中配置的hostname:port,一部分是HDFS上传文件的相对路径。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
5天前
|
分布式计算 DataWorks 调度
maxcompute配置问题之优先级如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
35 1
|
5天前
|
存储 分布式计算 Hadoop
maxcompute配置问题之加速查询超时配置回退如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
37 1
|
5天前
|
SQL 分布式计算 DataWorks
maxcompute配置问题之配置回退的参数如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
40 2
|
5天前
|
分布式计算 安全 专有云
maxcompute配置问题之不能正常执行如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
26 1
|
5天前
|
SQL 分布式计算 MaxCompute
maxcompute之配置报错如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
42 0
|
5天前
|
SQL 存储 分布式计算
maxcompute配置问题之配置mc内容如何解决
MaxCompute配置是指在使用阿里云MaxCompute服务时对项目设置、计算资源、存储空间等进行的各项调整;本合集将提供MaxCompute配置的指南和建议,帮助用户根据数据处理需求优化其MaxCompute环境。
37 1
|
5天前
|
存储 缓存 安全
阿里云EMR数据湖文件系统: 面向开源和云打造下一代 HDFS
本文作者详细地介绍了阿里云EMR数据湖文件系统JindoFS的起源、发展迭代以及性能。
71959 2
|
5天前
|
存储 分布式计算 DataWorks
MaxCompute产品使用合集之大数据计算MaxCompute dataworks可以批量修改数据集成任务的数据源配置信息吗
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之在开发环境中配置MaxCompute参数进行调度,但参数解析不出来,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
5天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之spark3.1.1通过resource目录下的conf文件配置,报错如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。