2401_85540850 2024-06-19 16:38 采纳率: 82.6%
浏览 2
已结题

hbase搭建的双节点搭建

关于hbase(双节点集群)提供的subject_score数据集使用hbase map reduce编写代码并打成jar包将subject_score数据导入hbase的subject表中

img

可提取文字

img

可转文字

img

可转文字

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-19 16:38
    关注

    引自免费微信小程序:皆我百晓生

    要将CSV文件subject_score.csv中的数据导入到HBase的subject表中,可以使用MapReduce作业。首先,确保Hadoop和HBase环境已正确配置,并且CSV文件已经上传到HDFS。

    步骤 1: 创建HBase表

    在HBase Shell中创建一个名为subject的表,包含info列族。

    hbase(main):001:0> create 'subject', 'info'
    

    步骤 2: 编写MapReduce程序

    使用Java编写一个MapReduce程序,读取HDFS上的CSV文件,并将数据写入HBase表中。

    Mapper类

    Mapper类应该解析CSV行,并将学号作为row key,科目和分数作为列名和值。

    import java.io.IOException;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
    import org.apache.hadoop.hbase.mapreduce.TableMapper;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    
    public class SubjectScoreMapper extends TableMapper<ImmutableBytesWritable, Put> {
        private final static ImmutableBytesWritable row = new ImmutableBytesWritable();
        private final static Text family = new Text("info");
        
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] parts = value.toString().split(",");
            if (parts.length == 3) {
                String studentId = parts[0];
                String subject = parts[1];
                String score = parts[2];
                
                Put put = new Put(Bytes.toBytes(studentId));
                put.addColumn(family.getBytes(), Bytes.toBytes(subject), Bytes.toBytes(score));
                row.set(Bytes.toBytes(studentId));
                context.write(row, put);
            }
        }
    }
    

    Reducer类

    Reducer在这个场景中不是必需的,因为我们可以直接从Mapper输出写入HBase。但是,如果你需要进行一些汇总操作,你可以添加一个Reducer类。

    Driver类

    这个类用于设置作业参数,包括输入输出路径、Mapper和Reducer类(如果有的话),以及HBase表的信息。

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.hbase.HBaseConfiguration;
    import org.apache.hadoop.hbase.client.Put;
    import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
    import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    
    public class SubjectScoreJob {
        public static void main(String[] args) throws Exception {
            Configuration conf = HBaseConfiguration.create();
            Job job = Job.getInstance(conf, "Subject Score Import");
            job.setJarByClass(SubjectScoreJob.class);
            job.setMapperClass(SubjectScoreMapper.class);
            // job.setReducerClass(YourReducerClass.class); // 如果有Reducer
            job.setOutputKeyClass(ImmutableBytesWritable.class);
            job.setOutputValueClass(Put.class);
            
            FileInputFormat.addInputPath(job, new Path(args[0]));
            job.setOutputFormatClass(TableOutputFormat.class);
            TableOutputFormat.configureIncrementalLoad(job, "subject", null);
            
            System.exit(job.waitForCompletion(true) ? 0 : 1);
        }
    }
    

    步骤 3: 打包并运行

    编译上述Java类,并将它们打包成一个JAR文件。然后,使用Hadoop命令行工具提交MapReduce作业。

    hadoop jar your-jar-file.jar SubjectScoreJob /path/to/subject_score.csv
    

    这将启动MapReduce作业,从CSV文件读取数据,并将其写入HBase的subject表中。确保替换your-jar-file.jar/path/to/subject_score.csv为实际的JAR文件名和CSV文件的HDFS路径。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 创建了问题 6月19日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见