配置spark+hadoop(hdfs)集群

本文详述了在全新服务器上配置Spark+hadoop(HDFS)集群的步骤,包括建立SSH无密码连接,部署JDK、Scala、Spark和Hadoop文件,设置系统环境变量,配置Hadoop和Spark集群的相关配置文件,以及启动集群的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天接到的任务是在全新的服务器上搭建spark+hdfs集群,用于测试刚刚release的工程。

master:sr288(10.1.0.188)

slaves:

sr494(10.1.2.94)

sr495(10.1.2.95)

sr496(10.1.2.96)

sr497(10.1.2.97)

由于hdfs需要ssh进行通信,而且文件传输scp也需要ssh。我第一步是建立起所有节点之间的ssh无需密码通信。

一、建立ssh无密码连接

ssh密码连接:服务器先给用户公钥,用户用公钥对密码进行加密,发送给服务器,服务器用私钥解密。

ssh无密码连接:每个服务器保存其他用户的公钥authorized_keys,但用户访问将公钥pub发给服务器,服务器比对无误利用pub加密质询q,用户利用私钥p解密质询发送给服务器。

1.以root权限登陆sr288,新建用户yb,并赋予该用户bash的权限

useradd -d /home/yb -m yb

passwd yb

visudo下加入

yb ALL=(ALL)ALL

在/etc/passwd下加入yb:/bin/bash

2.ssh 生成rsa

切换到用户yb生成rsa

ssh-keygen -t rsa

生成authorized_keys将公钥放入

cp id_rsa.pub authorized_keys

3.在其他服务器上同样新建用户yb

将~/.ssh复制到所有的服务器上。这里简单起见将所有的服务器的rsa都设成一样的,这样他们相当于在访问自己。实际应该将服务器A,B,C的公钥分别放入authorized_keys然后共享authorized_keys。

二、将jdk,scala,spark,hadoop文件放入master:sr288

jdk:/usr/java/jdk1.7.0_04

scala:/home/yb/GenBase/scala-2.11.7

spark:/home/yb/GenBase/spark

hadoop:/home/yb/GenBase/hadoop-1.0.4

三、配置系统环境变量

为了不影响其他用户,我在yb下的~/.bashrc里面设置环境变量

除了导入上述路径,还需制定PATH和CLASSPATH

PATH=$JAVA_HOME/bin:$SCALA_HOME:/bin:$HADOOP_HOME:/bin:$PATH

CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

然后将相同的文件和配置传入slaves

四、配置hadoop集群

修改conf下的配置文件

1.core-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://sr288:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/tmp/hadoop-${user.name}</value>
    </property>
</configuration>

2.hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_04
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
export HADOOP_PID_DIR=/home/yb/GenBase/hadoop-1.0.4/pid/

3.hdfs-site.xml

需要注意name和data不需要自己建立到时候hadoop namenode -format就行

<property>
    <name>dfs.replication</name>
    <value>3</value>
    <description>Default block replication.  </description>
  </property>

  <property>
    <name>dfs.name.dir</name>
    <value>/mnt/DP_disk2/hadoop-1.0.4/hdfs/namenode,/mnt/DP_disk1/hadoop-1.0.4/hdfs/namenode</value>
    <description>Default block replication.  </description>
  </property>

  <property>
    <name>dfs.data.dir</name>
    <value>/mnt/DP_disk1/hadoop-1.0.4/hdsf/datanode,/mnt/DP_disk2/hadoop-1.0.4/hdfs/datanode,/mnt/DP_disk3/hadoop-1.0.4/hdfs/datanode/mnt/DP_disk4/hadoop-1.0.4/hdfs/datanode,/mnt/DP_disk5/hadoop-1.0.4/hdfs/datanode</value>
    <description>Default block replication.  </description>
  </property>
4.mapred-site.xml

<property>
    <name>mapred.job.tracker</name>
    <value>10.1.0.188:54312</value>
    <description></description>
  </property>

  <property>
    <name>mapred.local.dir</name>
    <value>/home/yb/GenBase/hadoop/hdfs/local</value>
    <description></description>
  </property>

<property>
      <name>mapred.hosts.exclude</name>
      <value>~/GenBase/hadoop-1.0.4/conf/excludes</value>
      <final>true</final>
  </property>

5.masters

sr288

6.slaves

sr494
sr495
sr496
s4497


将整个hadoop-1.0.4复制到其他slaves上,然后运行hadoop namenode -format,成功后运行start-all.sh。之后就可以运行hadoop dfs -ls等命令了

五、配置spark集群

1.在conf/slaves下加入所有slaves

2.配置spark-env.sh

export JAVA_HOME=/usr/java/jdk1.7.0_04
export SPARK_EXECUTOR_INSTANCES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_EXECUTOR_CORES=72
export SPARK_EXECUTOR_INSTANCES=1

#export SPARK_DRIVER_MEMORY=170g
#SPARK_WORKER_CORES=72
#export SPARK_WORKER_MEMORY=170g
export SPARK_PID_DIR=/home/yb/GenBase/spark/pid/
PYSPARK_PYTHON=/usr/bin/python2.7

SPARK_WORKER_DIR=/mnt/DP_disk1/spark
SPARK_LOCAL_DIRS=/mnt/DP_disk2/spark/local
SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true"

SPARK_MASTER_PORT=7180
SPARK_WORKER_PORT=7181
SPARK_MASTER_WEBUI_PORT=8090
SPARK_WORKER_WEBUI_PORT=8091

SPARK_DRIVER_MEMORY根据master的内存大小设置,如果不设置则根据master内存自动分配。

SPARK_WORKER_MEMORY根据slaves的内存大小设置。

需要注意的是这两个地方在设置前需要查看一下当前机器的内存大小

cat /proc/meminfo

如果设置的过大会产生如下错误

Error occurred during initialization of VM
Could not reserve enough space for object heap
最后将spark文件复制到其他slaves上

运行sbin/start-all.sh就可以启动spark集群开始测试了。



### SparkHadoop学习资源汇总 #### Spark学习资源 Spark是一个开源的大数据分析框架,旨在提供快速而通用的数据处理能力[^2]。对于初学者而言,可以从以下几个方面入手: - **官方文档**:Apache Spark官方网站提供了详尽的文档支持材料,涵盖了从安装配置到高级特性的各个方面。 - **在线课程平台**: - Coursera、Udemy等网站上有许多由专家讲授的Spark视频教程,适合不同层次的学习者。 - edX上的大数据专项课程也包含了大量有关Spark的内容。 - **书籍推荐** - *Learning Spark* by Holden Karau et al. - 这本书深入浅出地介绍了如何利用Scala编写高效的Spark程序,并探讨了性能调优技巧以及最佳实践案例研究。 ```python from pyspark import SparkContext, SparkConf conf = SparkConf().setAppName("example").setMaster("local") sc = SparkContext(conf=conf) data = sc.parallelize([1, 2, 3, 4]) squared = data.map(lambda x: x*x).collect() print(squared) ``` #### Hadoop学习路径 作为分布式存储处理大规模数据集的基础架构之一,掌握Hadoop同样重要。这里给出一些指导方向: - **基础概念理解**:先了解Hadoop的核心组成部分——NameNodeDataNode的工作原理及其在整个文件系统中的角色定位[^3]。 - **动手实验环境构建**:通过虚拟机或容器技术(如Docker)来创建单节点或多节点集群模拟真实生产场景下的部署过程。 - **实战项目练习**:尝试完成简单的ETL流程开发任务,在实践中巩固理论知识的同时积累经验。 ```bash hdfs dfs -mkdir /input hdfs dfs -put input.txt /input/ hadoop jar hadoop-mapreduce-examples.jar wordcount /input /output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值