Hướng dẫn deploy Spark

Việc deploy Spark là cần thiết đối với các tác vụ mang tính chu kỳ. Ví dụ, ta có thể tạo một CRON job để chương trình Spark có thể tự động tổng hợp dữ liệu cho chúng ta sau chu kỳ mỗi giờ, mỗi ngày hay mỗi tuần. spark-submit là một shell command được dùng để deploy ứng dụng Spark lên cluster. Nhờ vào cơ chế quản lý phân tán của Spark, ta không cần phải chỉnh sửa source code quá nhiều để có thể chuyển đổi từ standalone mode sang distributed mode.

Để hoàn tutorial này, bạn cần các phần mềm sau:

Tiếp tục đọc

Thao tác với các công nghệ Big Data

how-to-use-big-data

how-to-use-big-data

Mục đích của bài viết này dùng để ghi chú lại các thao tác cơ bản cũng như một số khái niệm khi làm việc với các công nghệ được liệt kê bên dưới. Sau một thời gian tìm tòi học hỏi về các công nghệ mới, chúng ta nên notes lại cho bản thân để tiện tham khảo nhanh sau này, không cần tốn thời gian search Google một lần nữa.

Phần lớn thời gian, ta sẽ làm việc trên dòng lệnh. Do đó, đây cũng là một thói quen tốt giúp ta tổ chức công việc hiệu quả hơn, giải phóng đầu óc của chúng ta đỡ nhọc công ghi nhớ nhiều chi tiết nhỏ nhặt, thay vào đó ta giành thời gian tập trung vào bức tranh tổng quát nhiều hơn.

Tiếp tục đọc

Những chuyên gia bạn nên follow trong lĩnh vực Data Science

https://twitter.com/jeremywaite

https://twitter.com/hadleywickham

https://twitter.com/mikejulietbravo

https://twitter.com/EvanSinar

https://twitter.com/bobehayes

https://twitter.com/dez_blanchfield

https://twitter.com/andrewyng

https://twitter.com/hmason

https://twitter.com/kdnuggets

https://twitter.com/Ronald_vanLoon

https://twitter.com/HansRosling

https://twitter.com/randal_olson

https://twitter.com/kirkdborne

https://twitter.com/ValaAfshar

https://twitter.com/NateSilver538

Những câu nói hay về Data Science

Tầm quan trọng của dữ liệu

Data vs information

Data vs information

“You can have data without information, but you cannot have information without data.”- Daniel Keys Moran, Computer programmer and science fiction author

Bạn có thể có dữ liệu mà không cần thông tin, nhưng bạn không thể có thông tin mà không có dữ liệu.

“Most of the world will make decisions by either guessing or using their gut. They will be either lucky or wrong.”- Suhail Doshi, CEO, Mixpanel

Hầu hết mọi người đưa ra những quyết định chỉ dựa vào phán đoán của mình. Làm như vậy họ chỉ nhận được một là thành công do may mắn hay hai là thất bại do sai lầm.

“It is a capital mistake to theorize before one has data.”- Arthur Conan Doyle, Author of Sherlock Holmes

Ta sẽ mắc nhiều sai lầm khi đưa ra giả thuyết trước khi được cung cấp thêm dữ liệu.

“We’re entering a new world in which data may be more important than software.”- Tim O’Reilly, Founder, O’Reilly Media

Chúng ta đang ở trong một thế giới mới mà ở đó dữ liệu quan trọng hơn cả phần mềm.

“Data is a precious thing and will last longer than the systems themselves.”- Tim Berners-Lee, father of the Worldwide Web

Dữ liệu là một thứ tài sản quý giá và sẽ tồn tại lâu hơn cả chính hệ thống của mình.

“It’s difficult to imagine the power that you’re going to have when so many different sorts of data are available.”- Tim Berners-Lee

Bạn sẽ khó hình dung được sức mạnh mà bạn sẽ có khi sở hữu đa dạng các loại dữ liệu ngoài kia.

“Web users ultimately want to get at data quickly and easily. They don’t care as much about attractive sites and pretty design.”- Tim Berners-Lee

Người dùng Web thật sự cần dữ liệu càng nhanh càng đơn giản càng tốt. Họ sẽ không quan tâm nhiều đến vẻ hào nhoáng và vẻ đẹp của giao diện đâu.

“Data, I think, is one of the most powerful mechanisms for telling stories. I take a huge pile of data and I try to get it to tell stories.” – Steven Levitt, Co-author of Freakonomics

Dữ liệu là một công cụ mạnh mẽ được dùng để kể các câu chuyện. Tôi sử dụng nhiều biểu đồ khác nhau để kể nên các câu chuyện mà mình muốn chia sẻ.

“Before Google, and long before Facebook, Bezos had realized that the greatest value of an online company lay in the consumer data it collected.” – George Packer, author for the New Yorker

Trước khi có Google và Facebook, Bezos đã nhận ra rằng giá trị thật sự của các công ty online là dựa vào dữ liệu khách hàng mà họ thu thập được.

“Our ability to do great things with data will make a real difference in every aspect of our lives.” – Jennifer Pahlka, Founder and Executive Director for Code for America

Khả năng làm việc với dữ liệu sẽ mang lại những thay đổi hữu ích ở mọi mặt của cuộc sống chúng ta.

“Some of the best theorizing comes after collecting data because then you become aware of another reality.” – Robert J. Shiller, Winner of the Nobel Prize in Economics

Nhiều lý thuyết hay được phát minh từ việc thu thập dữ liệu. Vì trong quá trình này, bạn đã nhận ra được các chân lý mới.

“Without big data analytics, companies are blind and deaf, wandering out onto the Web like deer on a freeway.” – Geoffrey Moore, Partner at MDV

Nếu không phân tích được Big Data, các công ty cũng như những người khiếm thị và khiếm thính, đi vào khu rừng Web như những chú hưu ngây thơ.

Đối xử với dữ liệu

Torture the data

Torture the data

“Torture the data, and it will confess to anything.” – Ronald Coase, winner of the Nobel Prize in Economics

Hãy “tra tấn” dữ liệu và nó sẽ thú nhận với bạn tất cả.

“Data scientists are involved with gathering data, massaging it into a tractable form, making it tell its story, and presenting that story to others.” – Mike Loukides, VP, O’Reilly Media

Công việc của Data scientists liên quan đến thu thập dữ liệu, ghi chú lại các thông tin để dễ theo dõi, xây dựng câu chuyện trên các số liệu này, và trình bày câu chuyện đó cho mọi người.

“I think you can have a ridiculously enormous and complex data set, but if you have the right tools and methodology then it’s not a problem.” – Aaron Koblin, Entrepreneur in data and digital technologies

Nếu bạn có dữ liệu kỳ quặc, lớn và phức tạp nhưng bạn có những công cụ và phương pháp đúng đắn, thì mọi việc coi như xong.

“When human judgment and big data intersect there are some funny things that happen.”- Nate Silver, Founder of FiveThirtyEight

Khi phán xét của con người và Big Data gặp nhau thì sẽ có nhiều điều thú vị xảy ra.

Những điều không ngờ tới

Forensics and guess work

Forensics and guess work

“The problem with data is that it says a lot, but it also says nothing. ‘Big data’ is terrific, but it’s usually thin. To understand why something is happening, we have to engage in both forensics and guess work.”- Sendhil Mullainathan, Professor of economics, Harvard

Vấn đề của dữ liệu là nó sẽ cho ta biết quá nhiều thứ và cũng không cho ta biết gì cả. Để hiểu được điều gì đang diễn ra, bạn cần đóng vai như một người pháp y và nhà phỏng đoán.

“Big Data is like teenage sex: everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it.”- Dan Ariely, Author of Predictably Irrational

Big Data giống như sex ở tuổi teen: mọi người nói về nó, không ai thật sự biết phải làm như thế nào, mọi người nghĩ là mọi người đang thực hiện chúng, nên mọi người cho rằng họ đang làm điều đó.

Dữ liệu và quyền riêng tư

Eagle eye

Eagle eye

“Everything we do in the digital realm – from surfing the Web to sending an e-mail to conducting a credit card transaction to, yes, making a phone call – creates a data trail. And if that trail exists, chances are someone is using it – or will be soon enough.”- Douglas Rushkoff, Author of Throwing Rocks at the Google Bus

Những việc chúng ta làm liên quan đến kĩ thuật số – lướt web, gửi mail, giao dịch thẻ tín dụng, gọi điện thoại – đều tạo ra lưu vết dữ liệu. Nếu lưu vết này tồn tại, thì sẽ có ai đó đang sử dụng chúng hoặc không sớm thì muộn cũng sẽ sử dụng chúng.

“You happily give Facebook terabytes of structured data about yourself, content with the implicit tradeoff that Facebook is going to give you a social service that makes your life better.”- John Battelle, Founder of Wired Magazine

Bạn đưa hàng terabytes các thông tin về cá nhân cho Facebook, đổi lại Facebook sẽ cung cấp những dịch vụ giúp cho cuộc sống của bạn thêm thú vị hơn.

“It’s so cheap to store all data. It’s cheaper to keep it than to delete it. And that means people will change their behavior because they know anything they say online can be used against them in the future.”- Mikko Hypponen, Security and privacy expert

Việc lưu trữ dữ liệu rẻ hơn việc xoá dữ liệu. Nghĩa là mọi thông tin hiện tại sẽ được sử dụng để chống lại chúng ta trong nay mai.

“The price of freedom is eternal vigilance. Don’t store unnecessary data, keep an eye on what’s happening, and don’t take unnecessary risks.” — Chris Bell, US Congressman

Cái giá của sự tự do là phải luôn cảnh giác. Đừng lưu trữ những dữ liệu không cần thiết, hãy quan sát những gì đang diễn ra và đừng dính vào những rủi ro không cần thiết.

Những thay đổi

Sexy jobs

Sexy jobs

“I keep saying that the sexy job in the next 10 years will be statisticians, and I’m not kidding.”- Hal Varian, Chief economist, Google

Tôi luôn nói rằng nghề nghiệp “gợi cảm” nhất trong 10 năm tới sẽ là các nhà thống kê, và tôi không đùa đâu.

“There’s a digital revolution taking place both in and out of government in favor of open-sourced data, innovation, and collaboration.”- Kathleen Sebelius, Former United States Secretary of Health and Human Services

Có một cuộc cách mạng kĩ thuật số diễn ra ở trong và ngoài chính phủ liên quan đến mã nguồn mở, đổi mới và hợp tác.

“We should teach the students, as well as executives, how to conduct experiments, how to examine data, and how to use these tools to make better decisions.”- Dan Ariely

Tôi sẽ dạy cho những sinh viên, cũng như những nhà điều hành, cách tiến hành các thực nghiệm, làm sao để kiểm tra dữ liệu, làm sao sử dụng những công cụ này để đưa ra các quyết định tốt hơn.

“The world is one big data problem.”- Andrew McAfee, MIT scientist

Thế giới là một bài toán Big Data.

Nguồn tham khảo

41 Shareable Data Quotes That Will Change How You Think About Data
A Beginner’s Guide to Getting Your First Data Science Job

Amazon Kinesis Streams là gì

AWS Kinesis

AWS Kinesis

Thông thường, khi thiết kế một hệ thống streaming, ta nghĩ ngay đến bộ công cụ (Kafka, Storm, Redis) để nhận, xử lý, và lưu trữ dữ liệu. Tuy nhiên, khi sử dụng Kafka (một message queue giúp đảm bảo lượng dữ liệu khổng lồ ập đến không bị tắc nghẽn) bạn phải nghiên cứu khá nhiều công nghệ cũng như hiệu chỉnh các thiết lập, thậm chí phải viết code để tối ưu hoá hệ thống của mình. Tương tự như Kafka, Kinesis mặc dù có throughput (tốc độ đọc/ghi) không nhanh bằng nhưng lại giảm đáng kể công việc cho admin system cũng như các developer trong khâu bắn (put) dữ liệu và đọc dữ liệu từ stream.

Trong bài viết này, tôi sẽ trình bày một số thách thức trong xử lý stream cũng như các hướng tiếp cận để giải quyết. Đồng thời cũng giới thiệu sơ qua Kinesis, các tính năng và các thông số cơ bản của hệ thống cùng với các lệnh tương tác với Kinesis stream.

Tiếp tục đọc

Spark – Bước đầu lập trình

Working with RDD

Working with RDD

Ở bài viết trước, ta đã tìm hiểu về Spark SQL, API giúp ta có thể làm việc với MapReduce một cách dễ dàng bằng cách sử dụng ngôn ngữ SQL truyền thống. Spark SQL được kế thừa và tối ưu lại từ kiểu dữ liệu RDD. Do vậy, trong một vài trường hợp ta khó có thể sử dụng đến Spark SQL, ta vẫn có thể sử dụng các hàm trong RDD để làm việc trực tiếp với MapReduce. Qua bài viết này, tôi xin giới thiệu một vài đặc điểm thú vị của RDD các bạn cần lưu ý để có thể làm việc hiệu quả trên kiểu dữ liệu này.

Parallelized Collections

Đây là cơ chế quan trọng trong Spark. Từ một mảng dữ liệu bất kỳ, ta có thể tách mảng dữ liệu này ra thành nhiều phần (partitions/slices), sau đó phân phối (distribute) ra các máy trạm (cluster/slave/node) để chia tải, cuối cùng dữ liệu sẽ được tổng hợp lại tại máy chủ (master/driver). Thông thường ta sẽ cần từ 2-4 partitions cho mỗi CPU ở các máy trạm. Ta dùng hàm parallelize để phân phối dữ liệu.


val data = Array(1, 2, 3, 4, 5, 6)
val distData = sc.parallelize(data) // auto split data
val distData2 = sc.parallelize(data, 2) // split data into 2 partitions

Ví dụ, ta dùng hàm textFile để đọc dữ liệu từ HDFS (block size mỗi file mặc định là 64MB). Khi đó, Spark mặc định sẽ tạo ra một partition tương ứng cho từng block file lấy từ HDFS. Lưu ý, partitions >= blocks.

Spark tự động theo dõi cache được sử dụng tại mỗi node và sẽ loại bỏ dữ liệu của partition nào ít dùng nhất (LRU – least recently used). Ta có thể loại bỏ bằng tay dữ liệu RDD bằng hàm unpersist().

Broadcast variables v được tạo ra bằng cách gọi hàm SparkContext.broadcast(v). Broadcast variable là một wrapper xung quanh biến v, giá trị của biến này có thể được truy xuất thông qua hàm value.


val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar.value

Lỗi hay mắc phải

Lẫn lộn chế độ standalone với cluster mode. Ta hãy xem ví dụ bên dưới: tính tổng các giá trị của mảng data.


var counter = 0
var rdd = sc.parallelize(data)

// Mắc lỗi tại đây (counter khác nhau giữa master và các cluster)
rdd.foreach(x => counter += x)

println("Sum value: " + counter)

Thông thường ta sẽ làm như trên nhưng bạn cần lưu ý khi chạy ở chế độ cluster, lúc này dữ liệu không còn nằm trên master nữa mà được phân phối trên các cluster. Ta cần sử dụng Accumulators như ví dụ bên dưới.


val accum = sc.accumulator(0, "My Accumulator")

sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)

accum.value
res2: Int = 10

RDD Operations

RDDs hỗ trợ 2 phép toán chủ yếu: transformations, tạo ra dataset mới từ dataset ban đầu, và actions, trả dữ liệu về driver (master) program sau khi chạy một loạt các phép biến đổi trên dataset.

Tất cả transformations trong Spark đều hoạt động theo cơ chế lazy, nghĩa là các phép biến đổi này sẽ không được thực hiện cho đến khi phép toán action cần thực thi để trả về cho driver program. Nhờ vậy mà Spark chạy hiệu quả hơn, mỗi lần gọi hàm map(), Spark sẽ distribute dữ liệu ra các cluster và chỉ thực hiện actions khi cần reduce() kết quả về cho driver program. Ngoài ra, ta có thể cache dữ liệu  (trên đĩa, hay trên bộ nhớ phân tán trên nhiều nodes/cluster) cho việc truy xuất nhanh các tính toán tiếp theo.

Vậy nên chọn Storage Level nào?

Spark’s storage levels cho ta lựa chọn đánh đổi (trade-offs) giữa việc sử dụng bộ nhớ và CPU. Ta nên thử qua các option bên dưới để chọn ra được option phù hợp nhất cho hệ thống của mình.

  • Nếu dữ liệu RDDs của bạn có thể nằm gọn trong default storage level (MEMORY_ONLY), ta không cần chỉnh sử gì thêm. Option này sẽ giúp CPU hoạt động hiệu quả hơn khi có thể truy xuất dữ liệu RDD nhanh nhất có thể.
  • Tiếp đến MEMORY_ONLY_SER, SER ở đây là  serialization. Ta cần kết hợp sử dụng cùng với các library fast serialization để các object sinh ra được lưu vào bộ nhớ một cách tiết kiệm nhất nhưng vẫn cho phép truy xuất các đối tượng này có thể chấp nhận được.
  • Không nên lựa chọn cấu hình sử dụng tới ổ cứng, vì việc tính toán partition để lưu tạm dữ liệu cũng như truy xuất ổ cứng rất chậm và tốn kém, trừ khi dữ liệu của bạn quá lớn và bạn không còn lựa chọn nào khác. Bạn có thể nâng cấp RAM để hạn chế sử dụng đến ổ cứng.
  • Ta có thể sử dụng replicated storage levels nếu bạn muốn thông tin luôn sẵn sàng trường hợp một trong các cluster bị die. Tất cả storage levels đều cho phép tính toán lại dữ liệu bị mất, nhưng replicated cho phép bạn tiếp tục các tác vụ đang chạy mà không cần phải đợi để tính toán lại các partition bị mất mát dữ liệu.
  • Trong các môi trường mà việc sử dụng bộ nhớ nhiều hay nhiều ứng dụng hoạt động trên đó, thì chế độ OFF_HEAP mang lại cho bạn một số lợi ích sau:
    • Cho phép nhiều executors share cùng pool of memory trong Tachyon.
    • Giảm đáng kể chi phí garbage collection.
    • Cached data sẽ không bị mất nếu một trong các executors bị crash.

Nguồn tham khảo:

http://spark.apache.org/docs/latest/programming-guide.html

Spark Streaming là gì

ezTrade

ezTrade

Bạn đã bao giờ quan sát một phiên giao dịch chứng khoán vào mỗi buổi sáng (dịch vụ FPT Stock). Đã bao giờ tự hỏi ứng dụng Sentiment Analysis lấy dữ liệu từ Twitter hoạt động real-time như thế nào để giúp cho các marketer hay các chính trị gia đoán biết về xu hướng quan tâm của xã hội, từ đó họ có thể đưa ra được những chiến dịch phù hợp một cách kịp thời nhất. Hay mỗi lần vào siêu thị mua đồ ăn và quan sát thấy hàng dãy quầy thu ngân bấm mã vạch để lưu thông tin hoá đơn mua hàng của hàng trăm khách hàng mỗi giờ. Và còn nữa những giao dịch mà dữ liệu luôn phát sinh theo hàng giờ, phút, giây như tin nhắn gửi về server Facebook, giao dịch ngân hàng, tuyến bay trong hàng không, real-time bidding, thông tin sensor gửi từ các thiết bị wearable hay xe hơi như Uber,…

Vậy những thông tin đổ vào như thác nước này được lưu lại như thế nào? Các hệ quản trị cơ sở dữ liệu hiện tại dường như đã quá tải. Vì vậy, cộng đồng khoa học và các kĩ sư đã cùng nhau phát triển ra các hệ thống như NoSQL (Postegre, MongoDB, Casandra, Redis,…), Message queue (Kafka, Kinesis, Flume, …) để giải quyết thử thách trên. Trong bài viết này, tôi chủ yếu tổng hợp lại những thông tin quan trọng cần nắm bắt về Spark Streaming API, một thư viện hữu ích được dùng để tích hợp trong các hệ thống xử lý streaming.

Tiếp tục đọc

Làm việc với Spark DataFrames – Truy vấn cơ bản

Spark DataFrames

Spark DataFrames

DataFrame là một kiểu dữ liệu collection phân tán, được tổ chức thành các cột được đặt tên. Về mặt khái niệm, nó tương đương với các bảng quan hệ (relational tables) đi kèm với các kỹ thuật tối ưu tính toán.

DataFrame có thể được xây dựng từ nhiều nguồn dữ liệu khác nhau như Hive table, các file dữ liệu có cấu trúc hay bán cấu trúc (csv, json), các hệ cơ sở dữ liệu phổ biến (MySQL, MongoDB, Cassandra), hoặc RDDs hiện hành. API này được thiết kế cho các ứng dụng Big Data và Data Science hiện đại. Kiểu dữ liệu này được lấy cảm hứng từ DataFrame trong Lập trình R và Pandas trong Python hứa hẹn mang lại hiệu suất tính toán cao hơn.

Spark DataFrames Performance

Spark DataFrames Performance

Trong bài viết này, tôi sẽ tiến hành thực nghiệm một vài truy vấn cơ bản để làm quen với kiểu dữ liệu DataFrames. Ở các bài viết sau, ta sẽ đi sâu hơn vào các truy vấn nâng cao và phức tạp hơn.

Tiếp tục đọc

Kinh nghiệm làm việc với Big Data

Working with Big Data

Working with Big Data

Đã bao giờ bạn cảm thấy quá tải khi làm việc với Big Data chưa? Đã bao giờ bạn phải ngồi hàng giờ chỉ để transfer dữ liệu từ server này sang server khác chỉ để test thuật toán của mình? Hay những lúc chán chường khi nhìn script của mình bắt đầu chạy hàng giờ và cuối cùng phát hiện ra mình đã sai đâu đó? Mình nghĩ rằng tất cả những ai khi mới bắt đầu làm việc với Big Data đều có những cảm nhận như vậy. Trong bài viết này, tôi xin góp một chút kinh nghiệm của mình để làm việc với Big Data hiệu quả hơn, kể cả cá nhân hay làm việc nhóm.

Tiếp tục đọc

Giới thiệu và cài đặt MongoDB

MongoDB Hortonwork

MongoDB Hortonwork

Khi nói đến NoSQL database, ta sẽ nghe đến một cái tên quen thuộc đó là MongoDB. Đây là một open-source document database, được viết bằng ngôn ngữ c++, được dùng để lưu trữ và truy xuất dữ liệu lớn Big Data. Tôi mới làm quen với MongoDB nên làm một cái note để xem lại khi cần cài đặt hay nắm bắt nhanh các khái niệm cơ bản của cơ sở dữ liệu (CSDL) này. Bài viết gồm hai phần: giới thiệu và cài đặt.

Tiếp tục đọc