我成功通过了Spark和Hadoop开发者认证CCA175,现在我要分享学习的方法
我想和大家分享一下我如何通过了Cloudera的「CCA Spark和Hadoop开发者考试(CCA175)」。
在学习期间,包括学习hadoop和spark相关技术,大约需要1.5个月的时间,但如果仅仅是为了准备考试,大约需要2周的时间。
由于只是英语考试,所以在撰写本文时,没有找到任何与环境设置、学习方法和实际考试所需内容相关的日语参考信息。希望对想学习hadoop相关技术和spark的人有所帮助。
目录
1. 关于CCA175考试
2. 我的考试前信息和考试动机
3. 是否需要租用办公室?
4. 考前和考试期间的注意事项
5. 需要会说英语吗?
6. 参加Udemy课程和模拟考试
7. 关于学习方法和环境设置
8. 关于hadoop生态系统的相关学习
9. 考试技巧和临时准备
10. 代码示例介绍
最后
考试相关
CCA175是由Cloudera提供的hadoop·spark开发者资格考试,Cloudera是hadoop相关系统的主要分销商之一。在hadoop相关的云服务中,AWS的Amazon EMR和GCP的Dataproc也是众所周知的。

CCA175是一个主要考察使用Spark进行HDFS数据读取、数据转换、数据加工和数据存储,以及使用Spark SQL和Hive进行SQL分析的能力的考试。这个考试不涉及Hadoop相关技术的知识和数据架构的咨询能力,因此建议学习相关知识来补充这方面的知识(稍后会介绍)。CCA175的基本信息。
-
- 言語:英語のみ
-
- 試験時間:120分
-
- 合格水準:70%以上で合格
- 価格:295USドル(日本円で約3万円)
您可以在这里购买和申请考试。
https://www.cloudera.com/about/training/certification/cca-spark.html
购买后,我们将通过邮件向您发送PSI在线测试网站的安排,您可以在该网站上设置考试时间并参加考试。
在日本使用信用卡可以顺利结算(只能使用信用卡进行付款)。我的情况是在电脑版遇到了现金问题,没有成功,但在手机上尝试后成功购买了。
再考政策、常见问题解答、录取通知
请点击以下链接查看FAQ:
https://www.cloudera.com/about/training/certification/faq.html
-
- 再受験は何度でも可能ですが、30日の期間を空ける必要があります
-
- 合格通知はUSビジネスデイで3日ほどのようです。私の場合は土曜夕方受験、火曜早朝に連絡が来ました。
- 1週間ほどでデジタル証明書が発行されます
※ 如果您有某种附件,则有可能会被放入垃圾邮件文件夹。如果长时间未收到,请检查您的垃圾邮件文件夹。
填補
考试中心不提供测试环境,考生需要通过PSI远程访问Cloudera的环境来进行考试。考题将在浏览器上显示,考生需要在远程桌面上的终端中启动spark-shell并使用存储在HDFS和hive metastore中的数据进行数据处理,以满足考试要求。
-
- 試験は全9問で、処理したデータを指定した形式でHDFSやhive metastoreに格納した結果で評価されます。部分採点もあると思いますが、私の場合は7問正解でpass(合格)でした。問題ごとに点数が違う可能性もありはっきりとはいえませんが6問正解だと66.7%のため不合格となると思われ、不正解は2問までと思った方がいいです。
- 2時間程度ですがリモート環境のためやや重たく、またクラスター処理の待ち時間などもあり1問10分程度の持ち時間は相当短く感じると思います。1~2分で終わるものと時間のかかるものとばらばらだったりします。
必需品,准备物品
-
- 顔写真付き身分証明書1点(運転免許証でOK)
-
- マイク・カメラ付きPC
-
- 周囲に人のいない部屋・試験用の机
-
- 問題文を理解するレベルの英語読解力
- 試験監督官(モニタースタッフ)とのチャットができる簡易な英語力
在中文中,難易度(所感)的含義可以表達為衡量某事物的難易程度所帶來的主觀感受。
这段内容本身很简单,范围也只涉及到Spark、Hive和SparkSQL,相对较窄,看起来很简单。但是,在一个不熟悉的远程环境下,需要在短时间内迅速适应,并且需要实际处理数据而不是选择题,所以必须完全记住命令。从实际操作的感觉来看,难度略高。如果能够冷静应对,不算难的一类任务。
考试前的情报和参加考试的动机
作为大数据分析技能的一部分,我希望掌握RDBMS、DWH以及AWS/GCP云相关的基本知识,并了解NoSQL中用于大规模分布式处理的hadoop相关技术,以便能够获得客观能力的证明。因此,我决定进行相应的考试。
我之前有系统开发的经验,但是没有实际工作经验涉及NoSQL、Hadoop和Spark相关技术。由于考试资格没有必要的要求,所以没有实际工作经验也不会对考试本身有特别的问题。
是否需要租用办公室?
我是在家参加的考试。考场监考官通过聊天告诉我,要举起带摄像头的电脑,全方位地拍摄场景。虽然我周围有书本和其他东西,但只要周围没有人的话应该没有问题。
如果担心的话,我认为可以使用租用的办公室,但因为费用较高,我觉得在家也完全足够。
考试时,考试桌周围必须没有除了电脑鼠标以外的任何东西(手机,各种电子设备等)。
考试前和考试期间的注意事项
-
- 直前に暗記しようかと思いましたが準備に手間取り意外と時間かかりました。15分前には試験サイトに進んで、試験開始定刻から15分後スタートがリミットなのでそこまでには終わるように早めに準備することをおすすめします
-
- 離席もできないため事前にトイレ・水分補給は必須です
-
- おそらくイアピースで不正受験するのを防ぐ目的で、問題文を読み上げること・口元を隠すことが禁止されています。考えてるときに手を口元に持っていくとチャットで注意されます(すぐやめればOK)
- 不正を疑われるのを防ぐため、目線も画面から外さない方がいいです。考える時に上見たりするくらいでは何も言われませんでしたが一応
关于英语能力
需要能够理解问题文本和监考官的聊天内容,但并不需要会话能力。只需要读懂后,在聊天中回复”ok”或”yes”即可。
-
- ここのボタンをおしてカメラオンにしてください
-
- 身分証明書をカメラに映してください
-
- 部屋とデスク周りを映してください
-
- 準備ができたら試験開始してください
- 言われるのはこのくらいです
在线课程和模拟考试
如果你能夠在沒有看任何東西的情況下,正確地寫出這兩個Udemy課程的模擬試題的命令,我相信你可以輕鬆通過考試。其中一個課程附帶有解說影片,請務必觀看。
价格大约为5500日元。Udemy定期举办90%的折扣促销活动,所以请务必不要在错误的时候以2-3万元的价格购买。
①《CCA 175-Spark开发者考试准备+实践测试》由Navdeep Kaur
https://www.udemy.com/course/complete-cca-175-hadoop-spark-developer-with-practice-test/
② Navdeep Kaur 的 CCA 175 Spark 开发者实践测试
https://www.udemy.com/course/cca175-hadoop-spark-developer-practice-test/

-
- ネイティブではないため聴き取りづらく、字幕も不正確ですが画面上の資料を見れば内容理解とコマンドの確認する上では問題なく分かると思います。1.5倍速くらいにするのをおすすめします
- CCA175は試験の形態が変わっており、以前はflume等含まれていたところ除外され、spark中心になっています。上記講座は本記事執筆時点では唯一きちんと最新の試験範囲に更新している講座のようです。
我认为,当有一些相似的东西基于旧有前提,想要进行进一步学习或者学习超出考试范围时,使用这些材料是很好的。
講座的内容简介
-
- GCP上での環境設定
-
- sparkとは、RDD、DAG
-
- fileterやjoinなど基本的なデータ加工方法
-
- データフレームについて、jsonやavroなどデータフォーマット変換
-
- sparkSQL(Windows関数含む)
- ①模擬試験2題+②模擬試験3題
※模拟考试每组有8个问题,而实际考试则由9个问题组成。从难度上看,实际考试更简单更容易一些。
如果您想全面学习Scala,需要花费相当多的时间阅读其他书籍等。但是,如果您只需要在本次考试中掌握Spark Scala的基本理解程度,本课程所介绍的内容已经足够了。
学习方法和环境设置
如果你拥有高规格的电脑,我认为最好使用与本次考试相同的clouderaVM在本地电脑上尝试,但考虑到学习在云环境中构建spark处理,我推荐使用GCP的方法。
这种方法在上述的Udemy课程里已经详细解释了(还附带了命令),只要按照那样做就可以顺利完成。
关于GCP(集群环境设置)。
-
- アカウント作成・クレジットカード登録が必要です
- 費用は、私の場合は3,000円弱かかりました。クラスタを稼働させていると費用が掛かるため、終わったらクラスタを毎回忘れずに削除し、翌日にはお支払い(Billing)で請求金額を確認しておきましょう
・尽管在Udemy课程中介绍了使用sqoop注册测试数据的方法,但由于无法成功,我选择手动创建了csv等文件。只要记住avro、json等格式的共同操作方法,如format(“avro”)、format(“json”),即使无法创建数据也不会有问题。
在以下情景中使用GCP,可以提供一个良好的学习环境:

-
- Cloud Dataprocでクラスターを作成し、Virtual Machine(VMインスタンス)のSSHでターミナル起動→spark-shellコマンドでspark起動、という流れです
- クラスターを削除するとデータも消えるため、図の通りデータはデスクトップに作成し、Cloud Storageにファイルアプロードし、Cloud StorageとCloud DataprocのVM(virtual machine)のローカルフォルダをGCSFUSEでマウントし、VMローカルフォルダからHDFSの指定フォルダにPUT(hdfs dfs -putコマンド)することでデータ準備ができます。この辺の手順も講座の説明通りやれば問題なくできます。
下面是一部介绍的内容
// GCSFUSEインストール(コマンドは一部のみ抜粋)
export GCSFUSE_REPO=gcsfuse-lsb_release -c -s
// VMローカルにGoogle Storageマウントポイント用フォルダ作成
mkdir ~/spark-dataset
// GCP画面上で、Cloud Storageにデータアップロード用フォルダ作成 spark-dataframe
// Cloud StorageとVMローカルフォルダをマウント
gcsfuse spark-dataframe ~/spark-dataset
// VMローカルのフォルダにCloud Storageのフォルダ内容が表示されることを確認
cd ./spark-dataset
ls
// hdfsに作業用フォルダ作成
hdfs dfs -mkdir /user/testdata
// VMローカルフォルダ(Cloud Storageとマウント済み)の配下データ全部をhdfs作業フォルダにコピー(put)
hdfs dfs -put ~/spark-dataset/* /user/testdata
// hdfsのファイル確認(正しくデータが準備されていること)
hdfs dfs -ls /user/testdata
关于avro
我需要在avro环境中导入外部包,但是在我的情况下没有成功。在这个测试环境中已经设置好了,所以不需要担心,但是如果有人知道方法,请告诉我。
在学习中,json格式和avro格式之间的差异很小,所以没有特别的问题(为什么要转换为avro、是否更高效等方面还是自己调查并理解为好)。
推荐的学习方法
-
- 最初は模擬試験の回答もはじめから全部見て、全問でなくてもいいので一部は自分でコマンドを打ち込んでデータ操作できる感覚を掴む
-
- 回答のコマンドはすべて1度は打ち込んで手で覚える(データは無しでもいいのでキーボード叩いて覚える)
- 新しい情報がでてくるたびにポイントを取り出して分類し、githubに.mdファイルで自分なりの辞書を作る
例)
案例类
连接
筛选
蜂巢(Hive)
写入格式
等等
→ 这些将有助于知识的巩固,而且以后在实际工作中也会有用,比如想要加载带有标题的CSV文件时,只需参考这个页面即可。
学习相关知识
鑑於CCA175主要涉及Spark和SparkSQL的數據工程技能,為了獲得有關Hadoop相關技術的知識,建議您額外學習以下項目。
终极实践Hadoop – 驾驭你的大数据!
https://www.udemy.com/course/the-ultimate-hands-on-hadoop-tame-your-big-data/

我是亚马逊的高级工程师,专注于大数据处理和机器学习方面,并提供多个课程。这些课程内容可靠可信。
对于Hadoop生态系统的概述,特别是第7部分,最好保持一定的关注。

对于这些关于大数据的流行词汇,我认为我们可以理解它们之间的区别以及术语的含义。像Apache Ambari、YARN、MESOS、HBASE、MapReduce、TEZ、Spark、Pigs、Hive、HBASE、Apache Storm、Oozie、Zookeeper、sqoop、flume、kafka、mongoDB、cassandra、MySQL、Apache Drill、HIVE、Apache Phoenix、Presto和Apache Zeppelin等。
考试技巧和临时备考的相关方面
通过PSI在线测试网站,使用浏览器进行屏幕共享,在远程环境下访问Cloudera的虚拟桌面来参加本次考试。
以下是类似下图的形象。

为了让自己冷静下来,首先要做的是【事前准备】部分。
为了监控不正防止,我们将监视您的视线和鼠标点击。虽然这可能会产生一些副作用,但是电波声会持续不断地发出嗡嗡声,声音会随着您的操作而响起。
如果你独自在房间里参加考试,这会对你的精神造成相当大的电波攻击,所以只需要事先知道这一点就可以使自己冷静下来(可以调低音量或采取措施)。
为了将浏览器界面限制在试验页面上,事先关闭浏览器的其他标签页,并确保书签栏绝不呈现全屏显示。同时还应调整设置以隐藏任务栏。
首先,为了平静下来,先尝试【考试开始后篇】。
-
- 由于远程环境压力较大,是一个繁重的水下环境,但是可以将问题文的浏览器向右移动。
启动终端,调整窗口大小并将其靠左侧。(为了可以将问题文和终端并排查看)
先做一道题,就可以安心了,所以首先输入以下内容以获得操作的自信是很重要的。一旦掌握了感觉,由于任务本身很简单,我认为工作会越来越顺利。
// 起動
spark-shell
// 以下、scalaプロンプト(パスは問題文記載の入力データ用パス)
// とりあえずざっくりロード
val datadf = spark.read.textFile("/aaaaa/bbbb/xxxfile")
// 中身を見る(タブ区切りなら1列に出てくる)
datadf.show(5)
datadf.printSchema()
注意:如果有注明它是大规模数据的提示,例如3000万个数据,请避免操作,因为会花费很长时间。第一个问题基本上没有这种可能性。
无法使用hadoop fs(hdfs dfs)命令吗?
在我的情况下,不知为何在正式考试环境中无法使用hadoop fs、hdfs dfs命令,我本来想用cat命令来确认数据情况,但却无法实现,我感到很焦虑。虽然最后还是解决了,但如果有人知道解决方法,请告诉我。这可能只是考试特殊的情况。
考试经历感受(与模拟考试的不同之处)
由于在模拟考试的练习版本中,我意识到了一些之前没有注意到的问题,以下是我记录下来的。
- 在处理大规模数据(约3000万条)时,如果能够一气呵成地从加载到写入,而不需要存储在变量中,处理时间也会更快。尽管将数据存储在变量中更为可靠,但对于较大的数据来说,这会增加处理时间。
// 変数に入れるパターン(dataDF経由)
val dataDF = spark.read.option("sep","\t").csv("/user/xxx/inputfile").
select($"_c0",$"_c1")
dataDF.map(x => x.mkString("|").
write.format("text").save("/user/output")
// 変数に入れずに処理するパターン(loadしてそのままwrite)
spark.read.option("sep","\t").csv("/user/xxx/inputfile").
select($"_c0",$"_c1").map(x => x.mkString("|").
write.format("text").save("/user/output")
- 从未见过的压缩格式和文件格式
在模拟考试中,很少出现的orc文件格式和snappy压缩格式被频繁问到。然而,只需将option(“compression”,”gzip”)中的“gzip”改为“snappy”,所以没有特别紧迫的需要。
最好事先复习记忆的东西
即使理解了基本操作,但有些细节如果不预先记住的话可能会出错,所以我采取了以下措施。实际上,这些措施在考试中根本没有涉及,但我还是用括号进行了补充说明。
sequence (未出现)
xml (未出现)
hive,partition (未出现)
dense_rank (未出现)
arg sum (未出现)
unixtime转换 (未出现)
chmod (未出现)
完全不熟悉。更好的是要充分練習Hive和Meta Store表的讀寫。
然而,在實際考試中,我完全無法成功創建Hive表(不是預設的,而是在個別的數據庫下)。其中一個錯誤問題是這個,另一個是join。
如果参考最新版本的Udemy课程,也许能够很好地体现出来。
spark-shell命令的重点
在数据操作方面有多种方法,虽然能够同时掌握全部方法是最好的,但只要有一种方法确实掌握了,也能够应对,所以最好是首先确保能够稳定地掌握那一种方法。
-
- case classでschema定義しておく→データフレームやsparkSQL操作ができるので
-
- ※inferSchemaの方法もおさえておいた方がいい
-
- 模擬試験の回答とは違い、一つデータ加工するごとに val datadfxx = xxxxと変数に格納して datadfxx.show(5)などで確認しつつ確実に進める方がいいです。ミスも減らせるので。ただし、数千万件のデータ、と注意が入っているときは避ける必要があります。試験時間が無くなるので
- 問題「jsonファイルで格納してください。ファイルは圧縮しておいてください」は、圧縮してからjsonで保存するという順番で加工することに注意してください
// 方法①
dataFile.select("aaa","aaaa").write.option("compression","gzip").
json("/user/output")
// 方法②
dataFile.write.mode("overwrite").option("compression","gzip").
format("json").save("/user/output")
-
- joinのデフォルトがInner Joinであることを理解。joinはほぼ確実に問われます
- ※join left-antiも使える方がいいです
例
◆①user_id
A
B
C
◆②order_id,user_id
1,A
2,A
3,A
4,C
// ①+②join結果
①.join(②,"user_id")
結果:
1
3
※由于内连接是默认选项,只有存在于选项2中的A和B才会保留下来。
※注意输出单位,要保留左表的选项1中的user_id,确保数据能够被连接在一起。对于连接键相同但名称不同的模式,需要了解每种写法,并建议充分理解如何逐渐增加列的方法。
介绍示例代码
最后,我希望介绍一些在CCA175中处理的挑战,作为结束。
▼第一要素
-
- avroファイルをgzip圧縮してparquet形式で格納してください
- 出力ファイルはfname,state列だけにしてください
val datadf = spark.read.format("avro").load("/user/avrofile")
datadf.select("fname","state").write.option("compression","gzip").parquet("/user/output")
▼第二要点
-
- パイプ区切りテキストファイルをgzip圧縮されたparquet形式で「customer_m」という名前でmeta storeに書き込みしてください
- fname(名前)にMを含む行だけにして、stateごとのユーザー件数をカウントしてください
spark.read.option("sep","|").csv("/user/tab").
select(col("_c1").as("fname"),col("_c2").as("state").
where("fname like '%M%'").
groupBy("state").count.
write.mode("overwrite").option("compression","gzip").
option("fileFormat","parquet").
format("hive").saveAsTable("customer_m")
▼第三要件
-
- HDFS(/user/infile)にあるparquet形式のファイルから、2020年3月のpending中の注文数を日別にカウントしてjson形式でHDFS(/user/output)に格納してください
- 注文日はunixタイム形式です
spark.read.format("parquet").load("/user/infile").
withColumn("order_date",to_date(from_unixtime($"order_date"/1000))).
filter("order_date LIKE '2020-03%' and order_status='PENDING'").
groupBy($"order_date").count.write.mode("overwrite").
format("json").save("/user/output")
甲方需要提供以下要件。
-
- case classを使用してspark.sqlでデータ処理する例
- プロダクトid別の注文数トップ10を集計
// 1.case classでスキーマ定義
case class Products(pId:Integer,name:String)
case class Orders(prodId:Integer,order_total:Float)
// 2.カンマ区切りcsvファイルを定義したスキーマで格納。
// floatなどデータ形式もここで変換
val prodDF = spark.read.textFile("/user/testdata/xxxx/").
map(x => x.split(",")).map(c => Products(c(0).toInt,c(2)))
val ordDF = spark.read.textFile("/user/testdata/xxxx/").
map(x => x.split(",")).map(c => Orders(o(0).toInt,o(4).toFloat))
// 3.テーブルをjoinし、meta storeに一時テーブルを作成し、spark.sqlでパイプ区切りデータを作成
ordDF.join(prodDF,ordDF("prodId")===prodDF("pId")).
createOrReplaceTempView("joined")
val filtDF = spark.sql("select concat(prodId,'|',sum(order_total))
from joined group by prodId order by sum(order_total) desc limit 10")
// 4.textファイル形式でHDFSに書き込み
filtDF.write.mode("overwrite").format("text").save("/user/output")
最终
想知道有多少日本工程师想要参加CCA175考试?
我觉得即使没有日语信息,由于存在各种障碍,挑战考试的人可能很少。但如果您有兴趣今后参加CCA175考试并学习Spark和Hadoop,或者想要证明您的开发能力,希望本文对您有所帮助。