Hadoop测试小例

最近用Virtualbox装了个Ubuntu系统,搭了一个单机模式的hadoop。配置方法网上有许多,按流程仔细走一遍即可。搭好环境后,自然要测试一下,本篇使用了hadoop提供的wordcount进行测试,计算数据中的单词数量。

第一步

用putty(用啥软件随意)ssh登陆ubuntu系统,输入账号名,密码。(我用来管理hadoop的账号名是hadoop,账号名在搭环境时随意设置)。当然,你也可以直接在虚拟机的ubuntu系统下,打开命令界面,切换到管理hadoop的账号,命令是"su 账户名"
这里写图片描述
接下来,进入hadoop安装目录下,启动hadoop。(我的hadoop放在路径/usr/local/hadoop下)
命令:

cd /usr/local/hadoop
bin/start-all.sh

这里写图片描述
出现如图所示信息,用jps查看,是否启动成功。
这里写图片描述
某些同学启动后,可能会没有DataNode这一项。这是因为, /usr/local/hadoop/hdfs/data文件夹的权限问题,输入以下命令即可解决

chmod g-w /usr/local/hadoop/hdfs/data

第二步

建立用来测试的文件夹 test,具体路径看命令。我这里在hadoop账户目录下建立,这样用hadoop账号执行时,不会有什么权限问题。

cd /home/hadoop
mkdir test

这里写图片描述
然后,在test目录下,用vi命令建立一个文本1.txt,输入以下内容并保存。(其实vi使用起来挺方便的)
hello hadoop
hello World
Hello Java
Hey man
i am a programmer

第三步

接下来,将1.txt传到hadoop上。
首先,回到hadoop安装目录下。(下面的命令都在该目录下输入)

cd /usr/local/hadoop

然后,上传到/hadoop/in(你没看错,这个目录不需要你创建,你用dir命令也看不到,试想真正的情况下,能让你随便在hadoop服务器上创建个目录?在这里,你只要想成,这个目录时hadoop服务器给你上传任务的地方)

 bin/hadoop dfs -put /home/hadoop/text/1.txt /hadoop/in

上传后,执行下面的程序(这是一条命令,不是两条,在一行输入。同样/hadoop/out目录,其实也看不到,也不需要事先创建,实际在如果事先创建了这个目录,运行命令会报错。如果报错说该目录存在,那么只要换个名即可,如/hadoop/output)

bin/hadoop jar hadoop-examples-1.2.1.jar wordcount /hadoop/in/* /hadoop/out

这里写图片描述

计算后,结果会放入/hadoop/out/part-r-00000文件中,通过以下命令查看结果

 bin/hadoop dfs -cat /hadoop/out/part-r-00000

这里写图片描述
需要注意的是:
这里面的/hadoop/out和/hadoop/in,事先不存在。不需要你用mkdir命令创建。而且这两个目录的名字也是随意的,你可以把out改成output,同理in改成input。
现在,1.txt已经存在于/hadoop/in目录下,如果我们再次上传1.txt,会提示该文件已经存在。

这里写图片描述

总结

简单来说,测试hadoop要保证每一个要执行的文件,你的账号都要有权限。之后,建立测试数据,上传测试数据,调用hadoop处理数据,生成结果,显示结果,欢迎留言讨论。

<think>我们参考引用内容,用户意图是在Hadoop集群上使用Spark进行数据生成测试(造数测试)。这通常用于验证大数据处理流程或测试系统性能。 步骤: 1. 确保Hadoop集群和Spark集群已正确安装和配置,并且两者兼容。 2. 编写Spark应用程序来生成测试数据。 3. 将生成的测试数据写入HDFS(Hadoop分布式文件系统)以便后续处理。 4. 运行Spark应用程序并监控其性能。 根据引用[2],我们需要注意Hadoop和Spark的版本兼容性,特别是guava包的冲突问题。 具体步骤: 一、环境准备 1. Hadoop集群已启动(如引用[3]中所述,使用`start-dfs.sh`启动HDFS)。 2. Spark集群已启动(如引用[2]中所述,使用`/usr/local/spark/sbin/start-all.sh`启动Spark)。 二、编写Spark造数程序 我们可以使用Scala、Java、Python或R编写Spark程序。这里以Python(PySpark)为,因为它较为简洁。 示:生成随机数据并写入HDFS 假设我们要生成一个包含随机数的文本文件,每行一个数字。 ```python from pyspark.sql import SparkSession import random # 创建SparkSession spark = SparkSession.builder \ .appName("DataGeneration") \ .getOrCreate() # 设置生成的数据量(如1亿条) num_records = 100000000 # 生成随机整数RDD,每个分区生成一部分数据 # 这里我们使用100个分区来并行生成 rdd = spark.sparkContext.parallelize(range(num_records), 100) # 为每个元素生成一个随机整数(范围0到999999) random_rdd = rdd.map(lambda x: random.randint(0, 1000000)) # 将数据保存到HDFS output_path = "hdfs://<namenode_host>:<port>/path/to/output" # 替换为实际的HDFS地址和路径 random_rdd.saveAsTextFile(output_path) # 停止SparkSession spark.stop() ``` 注意: - 将`<namenode_host>:<port>`替换为Hadoop集群的NameNode地址和端口(默认端口为8020或9000,具体看配置)。 - 生成的数据量可以根据需要调整,注意集群资源。 三、运行Spark程序 将上述程序保存为`data_generation.py`,然后使用spark-submit提交: ```bash spark-submit --master spark://<spark_master_host>:7077 data_generation.py ``` 其中`<spark_master_host>`是Spark集群的主节点地址。 四、验证数据 生成后,可以使用HDFS命令检查数据: ```bash hdfs dfs -ls /path/to/output hdfs dfs -cat /path/to/output/part-00000 | head ``` 五、性能测试 在运行过程中,可以通过Spark Web UI(默认端口4040)监控作业执行情况,包括执行时间、资源使用情况等。 注意事项: 1. 随机数生成的质量和分布:根据测试需求,可能需要更复杂的数据结构(如模拟用户行为数据、交易数据等)。 2. 资源管理:生成大量数据会消耗集群资源(CPU、内存、磁盘IO和网络),确保集群资源足够。 3. 数据分区:合理设置分区数可以充分利用集群并行能力。 如果需要更复杂的数据结构,可以定义更复杂的映射函数。如,生成包含多个字段的JSON数据: ```python import json # 生成一个包含id和随机数值的字典 def generate_record(_): return json.dumps({ 'id': random.randint(1, 1000000), 'value': random.random(), 'timestamp': int(time.time()) }) # 使用numPartitions指定分区数 json_rdd = spark.sparkContext.parallelize(range(num_records), 100).map(generate_record) json_rdd.saveAsTextFile(output_path) ``` 六、清理测试数据 测试完成后,记得清理生成的测试数据: ```bash hdfs dfs -rm -r /path/to/output ``` 相关问题: 1. 如何调整Spark作业的性能参数? 2. 如何生成更复杂的测试数据(如模拟用户行为日志)? 3. Spark写入HDFS时,如何控制文件大小和数量? 4. 如何监控Spark作业的资源消耗? 5. 在生成数据过程中,如何避免内存溢出? 根据引用内容,我们特别要注意Hadoop和Spark的版本兼容性(如引用[2]提到的guava包冲突问题),以及集群配置的正确性。 如果用户需要更详细的步骤或有特定测试需求,可以进一步说明。</think>### Hadoop集群中使用Spark进行数据生成测试Hadoop集群中使用Spark进行数据生成测试(造数测试)是验证大数据处理流程、测试系统性能和容量的重要手段。以下是具体操作步骤和注意事项: #### 一、环境准备 1. **集群启动** - 启动Hadoop HDFS(参考引用[3]): ```bash hadoop namenode -format # 首次使用需初始化 start-dfs.sh # 启动HDFS ``` - 启动Spark集群(参考引用[2]): ```bash /usr/local/spark/sbin/start-all.sh ``` 2. **版本兼容性检查** - 确认Hadoop与Spark版本兼容(如Hadoop 3.x + Spark 3.x) - 解决依赖冲突(如引用[2]提到的guava包冲突): ```bash # 保留高版本guava包,删除低版本 cp /usr/local/hadoop/share/hadoop/common/lib/guava-*.jar /usr/local/spark/jars/ rm /usr/local/spark/jars/guava-14.0.1.jar ``` #### 二、Spark造数脚本编写(Python示) ```python from pyspark.sql import SparkSession import random # 初始化SparkSession spark = SparkSession.builder \ .appName("DataGeneration") \ .config("spark.hadoop.fs.defaultFS", "hdfs://namenode:9000") \ # HDFS地址 .getOrCreate() # 生成测试数据(1亿条记录) num_records = 100000000 data = [(i, f"user_{i}", random.randint(1,100)) for i in range(num_records)] # 创建DataFrame df = spark.createDataFrame(data, ["id", "username", "score"]) # 写入HDFS(Parquet格式) output_path = "hdfs://namenode:9000/data/test_data" df.write.parquet(output_path, mode="overwrite") # 验证数据量 print("生成记录数:", df.count()) spark.stop() ``` #### 三、关键配置项 1. **HDFS路径配置** - 确保Spark配置指向正确的HDFS地址(`fs.defaultFS`) - 输出路径需包含HDFS协议头:`hdfs://<namenode_host>:<port>/path` 2. **资源调优** 提交任务时指定资源参数: ```bash spark-submit --master spark://master:7077 \ --executor-memory 8G \ --total-executor-cores 16 \ data_generation.py ``` #### 四、验证与监控 1. **数据验证** ```bash # 查看HDFS文件 hdfs dfs -ls /data/test_data # 读取Parquet文件示 spark.read.parquet("hdfs://namenode:9000/data/test_data").show(5) ``` 2. **性能监控** - Spark Web UI(默认端口4040):查看任务执行时间、资源利用率 - HDFS监控(`http://namenode:9870`):检查存储空间和IO负载 #### 五、注意事项 1. **数据分区策略** - 通过`repartition()`控制输出文件数量: ```python df.repartition(100).write.parquet(...) # 生成100个文件 ``` - 避免小文件问题(单个文件建议128MB以上) 2. **依赖冲突** - 定期检查`hadoop classpath`与Spark的兼容性(参考引用[2]) - 使用`spark.driver.extraClassPath`指定Hadoop库路径 3. **安全模式** - Kerberos认证集群需添加keytab配置: ```python .config("spark.kerberos.keytab", "/path/to/user.keytab") \ .config("spark.kerberos.principal", "user@REALM") \ ``` > **性能参考**:在4节点集群(32核/128GB RAM)上,生成1亿条记录约需2-5分钟,具体取决于网络和磁盘性能。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值