【大数据面试】【项目开发经验】Hadoop、Flume、Kafka、Hive、MySQL、Sqoop、Azkaban、Spark...

主要内容:框架层面的调优、业务经验

 一、Hadoop

1、Hadoop基准测试(HDFS的读写性能、MapReduce的计算能力测试)

(1)测试内容:文件上传下载的时间

(2)服务器有几个硬盘插槽

2/4块

问题:2块4T和一块8T的哪个贵

2块4T的贵,可靠性更高一些

(3)加了磁盘,默认情况下不会直接能够使用

需要负载均衡,保证每个目录数据均衡

开启数据均衡命令:
bin/start-balancer.sh –threshold 10:集群中各个节点的磁盘空间利用率相差不超过10%

均衡了差不多,就需要杀掉此进程bin/stop-balancer.sh

2、HDFS参数调优

线程池:调整NN和DN之间的通信:处理与datanode的心跳(报告自身的健康状况和文件恢复请求)和元数据请求

dfs.namenode.handler.count=20 * log2(Cluster Size)

3、yarn的参数调优

(1)服务器节点上YARN可使用的物理内存总量,默认是8192(MB)
(2)单个任务可申请的最多物理内存量,默认是8192(MB)

NN、DN、shuffle的默认大小为1G

4、HDFS和硬盘使用控制在70%以下

5、Hadoop宕机

MR造成系统宕机:调整上述y

### 项目概述 开发一个基于多种大数据技术的数据可视化项目,涉及多个组件的协同工作。以下是一个典型的设计与实现方案: ### 架构设计 #### 数据采集层 使用 **Flume** 和 **Kafka** 进行数据采集和传输。Flume 负责从各种数据源(如日志文件、传感器等)收集数据,并将其发送到 Kafka 中,作为消息队列[^2]。 ```bash # Flume 配置示例 agent.sources = r1 agent.channels = c1 agent.sinks = k1 agent.sources.r1.type = netcat agent.sources.r1.bind = localhost agent.sources.r1.port = 44444 agent.channels.c1.type = memory agent.channels.c1.capacity = 1000 agent.sinks.k1.type = logger agent.sources.r1.channels = c1 agent.sinks.k1.channel = c1 ``` #### 数据存储层 使用 **Hadoop HDFS** 存储原始数据,**Hive** 和 **HBase** 用于结构化和半结构化的数据存储。**Parquet** 或 **ORC** 格式用于 Hive 表存储以提高查询效率[^2]。 ```sql -- Hive 创建 Parquet 表示例 CREATE TABLE parquet_table ( id INT, name STRING ) STORED AS PARQUET; ``` #### 数据处理层 使用 **Spark** 进行实时和批处理任务。Spark 可以从 Kafka 读取数据进行实时处理,也可以从 HDFS 读取数据进行批处理。处理后的结果可以写入 MySQL 或其他数据库。 ```scala // Spark 实时处理 Kafka 数据示例 import org.apache.spark._ import org.apache.spark.streaming._ val conf = new SparkConf().setAppName("KafkaReceiver") val ssc = new StreamingContext(conf, Seconds(5)) val kafkaParams = Map[String, Object]( "bootstrap.servers" -> "localhost:9092", "key.deserializer" -> classOf[StringDeserializer], "value.deserializer" -> classOf[StringDeserializer], "group.id" -> "spark-streaming-group", "auto.offset.reset" -> "latest", "enable.auto.commit" -> (false: java.lang.Boolean) ) val topics = Array("input-topic") val stream = KafkaUtils.createDirectStream[String, String]( ssc, LocationStrategies.PreferConsistent, ConsumerStrategies.Subscribe[String, String](topics, kafkaParams) ) stream.map(record => record.value) .foreachRDD { rdd => // 处理 RDD 数据 } ssc.start() ssc.awaitTermination() ``` #### 数据导入层 使用 **Sqoop** 将处理后的数据从 Hive 导出到 MySQL。如果 Hive 表使用了 Parquet 或 ORC 格式,则需要先转换为 Text 格式再导入 MySQL。 ```bash # Sqoop 导出数据到 MySQL 示例 sqoop export \ --connect jdbc:mysql://localhost:3306/mydb \ --username root \ --password password \ --table mytable \ --export-dir /user/hive/warehouse/mytable ``` #### 数据可视化层 使用 **Tableau** 或 **Power BI** 等工具连接 MySQL 数据库,进行数据可视化展示。 ### 实现步骤 1. **部署环境**:搭建 HadoopHive、HBase、SparkKafkaFlume、Zookeeper、Phoenix、SqoopAzkaban 等组件。 2. **数据采集**:配置 FlumeKafka,确保数据能够顺利采集并传输。 3. **数据存储**:在 HDFS 上存储原始数据,并使用 Hive 和 HBase 进行结构化存储。 4. **数据处理**:编写 Spark 应用程序进行实时和批处理。 5. **数据导入**:使用 Sqoop 将处理后的数据导入 MySQL。 6. **数据可视化**:使用 Tableau 或 Power BI 连接 MySQL 数据库,进行数据可视化。 ### 总结 通过上述架构设计和实现步骤,可以构建一个完整的基于多种大数据技术的数据可视化项目。每个组件都发挥了其独特的作用,从数据采集到存储、处理、导入再到最终的可视化展示,形成了一个闭环的数据处理流程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值